diff --git a/mrdna/arbdmodel/LICENSE b/mrdna/arbdmodel/LICENSE
new file mode 120000
index 0000000000000000000000000000000000000000..ea5b60640b01f74e295037aa8a6b7d4ea278a739
--- /dev/null
+++ b/mrdna/arbdmodel/LICENSE
@@ -0,0 +1 @@
+../LICENSE
\ No newline at end of file
diff --git a/mrdna/arbdmodel/README.md b/mrdna/arbdmodel/README.md
new file mode 120000
index 0000000000000000000000000000000000000000..32d46ee883b58d6a383eed06eb98f33aa6530ded
--- /dev/null
+++ b/mrdna/arbdmodel/README.md
@@ -0,0 +1 @@
+../README.md
\ No newline at end of file
diff --git a/mrdna/arbdmodel/__init__.py b/mrdna/arbdmodel/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..17082119bd78e8b9a9e2e82a01972cc37f1b6339
--- /dev/null
+++ b/mrdna/arbdmodel/__init__.py
@@ -0,0 +1,1379 @@
+# -*- coding: utf-8 -*-
+from pathlib import Path
+
+from .version import get_version
+__version__ = get_version() 
+
+import numpy as np
+from copy import copy, deepcopy
+from inspect import ismethod
+import os, sys, subprocess
+
+_RESOURCE_DIR = Path(__file__).parent / 'resources'
+def get_resource_path(relative_path):
+    return _RESOURCE_DIR / relative_path
+
+## Abstract classes
+class Transformable():
+    def __init__(self, position, orientation=None):
+        self.position = np.array(position)
+        if orientation is not None:
+            orientation = np.array(orientation)
+        self.orientation = orientation
+
+    def transform(self, R = ((1,0,0),(0,1,0),(0,0,1)),
+                  center = (0,0,0), offset = (0,0,0)):
+
+        R,center,offset = [np.array(x) for x in (R,center,offset)]
+
+        self.position = R.dot(self.position-center)+center+offset
+                
+        if self.orientation is not None:
+            ## TODO: what if self.orientation is taken from parent?!
+            self.orientation = self.orientation.dot(R)
+        ...        
+
+    def collapsedPosition(self):
+        # print("collapsedPosition called", type(self), self.name)
+        if isinstance(self, Child):
+            # print(self.parent, isinstance(self.parent,Transformable))
+            if isinstance(self.parent, Transformable):
+                return self.applyOrientation(self.position) + self.parent.collapsedPosition()
+            
+                # if self.parent.orientation is not None:
+                #     return self.parent.collapsedOrientation().dot(self.position) + self.parent.collapsedPosition()
+        return np.array(self.position) # return a copy
+                
+    def applyOrientation(self,obj):
+        # print("applyOrientation called", self.name, obj)
+        if isinstance(self, Child):
+            # print( self.orientation, self.orientation is not None, None is not None )
+            # if self.orientation is not None:
+            #     # print("applyOrientation applying", self, self.name, self.orientation)
+            #     obj = self.orientation.dot(obj)
+            if isinstance(self.parent, Transformable):
+                if self.parent.orientation is not None:
+                    obj = self.parent.orientation.dot(obj)
+                obj = self.parent.applyOrientation(obj)
+        # print("applyOrientation returning", self.name, obj)
+        return obj
+
+class Parent():
+    def __init__(self, children=None, remove_duplicate_bonded_terms=False):
+        self.children = []
+        if children is not None:
+            for x in children:
+                self.add(x)
+        
+        self.remove_duplicate_bonded_terms = remove_duplicate_bonded_terms
+        self.bonds = []
+        self.angles = []
+        self.dihedrals = []
+        self.impropers = []
+        self.exclusions = []
+
+        self.rigid = False
+
+        ## TODO: self.cacheInvalid = True # What will be in the cache?
+
+    def add(self,x):
+        ## TODO: check the parent-child tree to make sure there are no cycles
+        if not isinstance(x,Child):
+            raise Exception('Attempted to add an object to a group that does not inherit from the "Child" type')
+
+        if x.parent is not None and x.parent is not self:
+            raise Exception("Child {} already belongs to some group".format(x))
+        x.parent = self
+        self.children.append(x)
+
+    def insert(self,idx,x):
+        ## TODO: check the parent-child tree to make sure there are no cycles
+        if not isinstance(x,Child):
+            raise Exception('Attempted to add an object to a group that does not inherit from the "Child" type')
+
+        if x.parent is not None and x.parent is not self:
+            raise Exception("Child {} already belongs to some group".format(x))
+        x.parent = self
+        self.children.insert(idx,x)
+
+    def index(self, x):
+        return self.children.index(x)
+
+    def clear_all(self, keep_children=False):
+        if keep_children == False:
+            for x in self.children:
+                x.parent = None
+            self.children = []
+        self.bonds = []
+        self.angles = []
+        self.dihedrals = []
+        self.impropers = []
+        self.exclusions = []
+
+    def remove(self,x):
+        if x in self.children:
+            self.children.remove(x)
+            if x.parent is self:
+                x.parent = None
+
+    def add_bond(self, i,j, bond, exclude=False):
+        assert( i is not j )
+        ## TODO: how to handle duplicating and cloning bonds
+        # beads = [b for b in self]
+        # for b in (i,j): assert(b in beads)
+        self.bonds.append( (i,j, bond, exclude) )
+
+    def add_angle(self, i,j,k, angle):
+        assert( len(set((i,j,k))) == 3 )
+        # beads = [b for b in self]
+        # for b in (i,j,k): assert(b in beads)
+        self.angles.append( (i,j,k, angle) )
+
+    def add_dihedral(self, i,j,k,l, dihedral):
+        assert( len(set((i,j,k,l))) == 4 )
+
+        # beads = [b for b in self]
+        # for b in (i,j,k,l): assert(b in beads)
+        self.dihedrals.append( (i,j,k,l, dihedral) )
+
+    def add_improper(self, i,j,k,l, dihedral):
+        # beads = [b for b in self]
+        # for b in (i,j,k,l): assert(b in beads)
+        self.impropers.append( (i,j,k,l, dihedral) )
+
+    def add_exclusion(self, i,j):
+        ## TODO: how to handle duplicating and cloning bonds
+        ## TODO: perform following check elsewhere
+        # beads = [b for b in self]
+        # for b in (i,j): assert(b in beads)
+        self.exclusions.append( (i,j) )
+
+    def get_restraints(self):
+        ret = []
+        for c in self.children:
+            ret.extend( c.get_restraints() )
+        return ret
+
+    def get_bonds(self):
+        ret = self.bonds
+        for c in self.children:
+            if isinstance(c,Parent): ret.extend( c.get_bonds() )
+        if self.remove_duplicate_bonded_terms:
+            return list(set(ret))
+        else:
+            return ret
+
+
+    def get_angles(self):
+        ret = self.angles
+        for c in self.children:
+            if isinstance(c,Parent): ret.extend( c.get_angles() )
+        if self.remove_duplicate_bonded_terms:
+            return list(set(ret))
+        else:
+            return ret
+
+    def get_dihedrals(self):
+        ret = self.dihedrals
+        for c in self.children:
+            if isinstance(c,Parent): ret.extend( c.get_dihedrals() )
+        if self.remove_duplicate_bonded_terms:
+            return list(set(ret))
+        else:
+            return ret
+
+    def get_impropers(self):
+        ret = self.impropers
+        for c in self.children:
+            if isinstance(c,Parent): ret.extend( c.get_impropers() )
+        if self.remove_duplicate_bonded_terms:
+            return list(set(ret))
+        else:
+            return ret
+
+    def get_exclusions(self):
+        ret = self.exclusions
+        for c in self.children:
+            if isinstance(c,Parent): ret.extend( c.get_exclusions() )
+        if self.remove_duplicate_bonded_terms:
+            return list(set(ret))
+        else:
+            return ret
+
+    ## Removed because prohibitively slow
+    # def remove_duplicate_terms(self):
+    #     for key in "bonds angles dihedrals impropers exclusions".split():
+    #         self.remove_duplicate_item(key)
+
+    # def remove_duplicate_item(self, dict_key, existing=None):
+    #     if existing is None: existing = []
+    #     ret = [i for i in list(set(self.__dict__[dict_key])) if i not in existing]
+    #     self.__dict__[dict_key] = ret
+    #     existing.extend(ret)
+    #     for c in self.children:
+    #         if isinstance(c,Parent): 
+    #             ret = ret + c.remove_duplicate_item(dict_key, existing)
+    #     return ret
+        
+
+    def __iter__(self):
+        ## TODO: decide if this is the nicest way to do it!
+        """Depth-first iteration through tree"""
+        for x in self.children:
+            if isinstance(x,Parent):
+                if isinstance(x,Clone) and not isinstance(x.get_original_recursively(),Parent):
+                    yield x
+                else:
+                    for y in x:
+                        yield y
+            else:
+                yield x    
+
+    def __len__(self):
+        l = 0
+        for x in self.children:
+            if isinstance(x,Parent):
+                l += len(x)
+            else:
+                l += 1
+        return l
+        
+    def __getitem__(self, i):
+        return self.children[i]
+    
+    def __setitem__(self, i, val):
+        x = self.children[i]
+        x.parent = None
+        val.parent = self
+        self.children[i] = val
+        
+class Child():
+    def __init__(self, parent=None):
+        self.parent = parent
+        if parent is not None:
+            assert( isinstance(parent, Parent) )
+            parent.children.append(self)
+
+    def __getattr__(self, name):
+        """
+        Try to get attribute from the parent
+
+        """
+        # if self.parent is not None:
+        if "parent" not in self.__dict__ or self.__dict__["parent"] is None or name is "children":
+            raise AttributeError("'{}' object has no attribute '{}'".format(type(self).__name__, name))
+
+
+        excluded_attributes = ['parent','rigid']
+        if name in excluded_attributes:
+            raise AttributeError("'{}' object has no attribute '{}' and cannot look it up from the parent".format(type(self).__name__, name))
+
+        ## TODO: determine if there is a way to avoid __getattr__ if a method is being looked up  
+        try:
+            ret = getattr(self.parent,name)
+        except:
+            raise AttributeError("'{}' object has no attribute '{}'".format(type(self).__name__, name))
+        if ismethod(ret):
+            raise AttributeError("'{}' object has no method '{}'".format(type(self).__name__, name))
+        return ret 
+
+            
+    # def __getstate__(self):
+    #     print("Child getstate called", self)
+    #     print(self.__dict__)
+    #     return (self.__dict__,)
+
+    # def __setstate__(self, state):
+    #     self.__dict__, = state
+
+class Clone(Transformable, Parent, Child):
+    def __init__(self, original, parent=None,
+                 position = None,
+                 orientation = None):
+        if position is None and original.position is not None:
+            position = np.array( original.position )
+        if orientation is None and original.orientation is not None:
+            orientation = np.array( original.orientation )
+        if parent is None:
+            parent = original.parent
+        self.original = original
+        Child.__init__(self, parent)        
+        Transformable.__init__(self, position, orientation)        
+
+        ## TODO: keep own bond_list, etc, update when needed original changes
+
+        if "children" in original.__dict__ and len(original.children) > 0:
+            self.children = [Clone(c, parent = self) for c in original.children]
+        else:
+            self.children = []
+
+    def get_original_recursively(self):
+        if isinstance(self.original, Clone):
+            return self.original.get_original_recursively()
+        else:
+            return self.original
+
+    def __getattr__(self, name):
+        """
+        Try to get attribute from the original without descending the tree heirarchy, then look up parent
+
+        TODO: handle PointParticle lookups into ParticleType
+        """
+        # print("Clone getattr",name)
+        if name in self.original.__dict__:
+            return self.original.__dict__[name]
+        else:
+            if "parent" not in self.__dict__ or self.__dict__["parent"] is None:
+                raise AttributeError("'{}' object has no attribute '{}'".format(type(self).__name__, name))
+            return getattr(self.parent, name)
+        
+
+## Particle classes
+class ParticleType():
+    """Class that hold common attributes that particles can point to"""
+
+    excludedAttributes = ("idx","type_",
+                          "position",
+                          "children",
+                          "parent", "excludedAttributes","rigid"
+    )
+
+    def __init__(self, name, charge=0, parent=None, **kargs):
+        """ Parent type is used to fall back on for nonbonded interactions if this type is not specifically referenced """
+
+        self.name        = name
+        self.charge = charge
+        self.parent = parent
+
+        for key in ParticleType.excludedAttributes:
+            assert( key not in kargs )
+
+        for key,val in kargs.items():
+            self.__dict__[key] = val
+
+    def is_same_type(self, other):
+        assert(isinstance(other,ParticleType))
+        if self == other:
+            return True
+        elif self.parent is not None and self.parent == other:
+            return True
+        else:
+            return False
+
+    def __hash_key(self):
+        l = [self.name,self.charge]
+        for keyval in sorted(self.__dict__.items()):
+            if isinstance(keyval[1], list): keyval = (keyval[0],tuple(keyval[1]))
+            l.extend(keyval)
+        return tuple(l)
+
+    def __hash__(self):
+        return hash(self.__hash_key())
+    
+    def _equal_check(a,b):
+        if a.name == b.name:
+            if a.__hash_key() != b.__hash_key():
+                raise Exception("Two different ParticleTypes have same 'name' attribute")
+
+    def __eq__(a,b):
+        a._equal_check(b)
+        return a.name == b.name
+    def __lt__(a,b):
+        a._equal_check(b)
+        return a.name < b.name
+    def __le__(a,b):
+        a._equal_check(b)
+        return a.name <= b.name
+    def __gt__(a,b):
+        a._equal_check(b)
+        return a.name > b.name
+    def __ge__(a,b):
+        a._equal_check(b)
+        return a.name >= b.name
+
+    def __repr__(self):
+        return '<{} {}{}>'.format( type(self), self.name, '[{}]'.format(self.parent) if self.parent is not None else '' )
+
+
+class PointParticle(Transformable, Child):
+    def __init__(self, type_, position, name="A", **kwargs):
+        parent = None
+        if 'parent' in kwargs:
+            parent = kwargs['parent']
+        Child.__init__(self, parent=parent)
+        Transformable.__init__(self,position)
+
+        self.type_    = type_                
+        self.idx     = None
+        self.name = name
+        self.counter = 0
+        self.restraints = []
+
+        for key,val in kwargs.items():
+            self.__dict__[key] = val
+        
+    def add_restraint(self, restraint):
+        ## TODO: how to handle duplicating and cloning bonds
+        self.restraints.append( restraint )
+
+    def get_restraints(self):
+        return [(self,r) for r in self.restraints]
+
+    def duplicate(self):
+        new = deepcopy(self)
+        return new
+
+    def __getattr__(self, name):
+        """
+        First try to get attribute from the parent, then type_
+        
+        Note that this data structure seems to be fragile, can result in stack overflow
+        
+        """
+        # return Child.__getattr__(self,name)
+        try:
+            return Child.__getattr__(self,name)
+        except Exception as e:
+            if 'type_' in self.__dict__:
+                return getattr(self.type_, name)
+            else:
+                raise AttributeError("'{}' object has no attribute '{}'".format(type(self).__name__, name))
+
+    def _get_psfpdb_dictionary(self):
+        p = self
+        try:
+            segname = p.segname
+        except:
+            segname = "A"
+        try:
+            chain = p.chain
+        except:
+            chain = "A"
+        try:
+            resname = p.resname
+        except:
+            resname = p.name[:3]
+        try:
+            resid = p.resid
+        except:
+            resid = p.idx+1
+        try:
+            mass = p.mass
+        except:
+            mass = 1
+
+        try:
+            occ = p.occupancy
+        except:
+            occ = 0
+        try:
+            beta = p.beta
+        except:
+            beta = 0
+
+        data = dict(segname = segname,
+                    resname = resname,
+                    name = str(p.name)[:4],
+                    chain = chain[0],
+                    resid = int(resid),
+                    idx = p.idx+1,
+                    type = p.type_.name[:7],
+                    charge = p.charge,
+                    mass = mass,
+                    occupancy = occ,
+                    beta = beta
+                )
+        return data
+
+
+class Group(Transformable, Parent, Child):
+
+    def __init__(self, name=None, children = None, parent=None, 
+                 position = np.array((0,0,0)),
+                 orientation = np.array(((1,0,0),(0,1,0),(0,0,1))),
+                 remove_duplicate_bonded_terms = False,
+                 **kwargs):
+
+        Transformable.__init__(self, position, orientation)
+        Child.__init__(self, parent) # Initialize Child first
+        Parent.__init__(self, children, remove_duplicate_bonded_terms)
+        self.name = name
+        self.isClone = False
+
+        for key,val in kwargs.items():
+            self.__dict__[key] = val
+
+
+    def clone(self):
+        return Clone(self)
+        g = copy(self)
+        g.isClone = True        # TODO: use?
+        g.children = [copy(c) for c in g.children]
+        for c in g.children:
+            c.parent = g
+        return g
+        g = Group(position = self.position,
+                  orientation = self.orientation)
+        g.children = self.children # lists point to the same object
+
+    def duplicate(self):
+        new = deepcopy(self)
+        for c in new.children:
+            c.parent = new
+        return new
+        # Group(position = self.position,
+        #       orientation = self.orientation)
+        # g.children = deepcopy self.children.deepcopy() # lists are the same object
+
+    ## TODO override deepcopy so parent can be excluded from copying?
+        
+    # def __getstate__(self):
+    #     return (self.children, self.parent, self.position, self.orientation)
+
+    # def __setstate__(self, state):
+    #     self.children, self.parent, self.position, self.orientation = state
+
+        
+class PdbModel(Transformable, Parent):
+
+    def __init__(self, children=None, dimensions=None, remove_duplicate_bonded_terms=False):
+        Transformable.__init__(self,(0,0,0))
+        Parent.__init__(self, children, remove_duplicate_bonded_terms)
+        self.dimensions = dimensions
+        self.particles = [p for p in self]
+        self.cacheInvalid = True
+
+    def _updateParticleOrder(self):
+        pass
+
+    def writePdb(self, filename, beta_from_fixed=False):
+        if self.cacheInvalid:
+            self._updateParticleOrder()
+        with open(filename,'w') as fh:
+            ## Write header
+            fh.write("CRYST1{:>9.3f}{:>9.3f}{:>9.3f}  90.00  90.00  90.00 P 1           1\n".format( *self.dimensions ))
+
+            ## Write coordinates
+            formatString = "ATOM {idx:>6.6s} {name:^4.4s} {resname:3.3s} {chain:1.1s}{resid:>5.5s}   {x:8.8s}{y:8.8s}{z:8.8s}{occupancy:6.2f}{beta:6.2f}  {charge:2d}{segname:>6s}\n"
+            for p in self.particles:
+                ## http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM
+                data = p._get_psfpdb_dictionary()
+                idx = data['idx']
+
+                if np.log10(idx) >= 5:
+                    idx = " *****"
+                else:
+                    idx = "{:>6d}".format(idx)
+                data['idx'] = idx
+
+                if beta_from_fixed:
+                    data['beta'] = 1 if 'fixed' in p.__dict__ else 0
+
+                pos = p.collapsedPosition()
+                dig = [max(int(np.log10(np.abs(x)+1e-6)//1),0)+1 for x in pos]
+                for d in dig: assert( d <= 7 )
+                # assert( np.all(dig <= 7) )
+                fs = ["{: %d.%df}" % (8,7-d) for d in dig]
+                x,y,z = [f.format(x) for f,x in zip(fs,pos)] 
+                data['x'] = x
+                data['y'] = y
+                data['z'] = z
+                assert(data['resid'] < 1e5)
+                data['charge'] = int(data['charge'])
+                data['resid'] = "{:<4d}".format(data['resid'])
+                fh.write( formatString.format(**data) )
+
+        return
+        
+    def writePsf(self, filename):
+        if self.cacheUpToDate == False:
+            self._updateParticleOrder()
+        with open(filename,'w') as fh:
+            ## Write header
+            fh.write("PSF NAMD\n\n") # create NAMD formatted psf
+            fh.write("{:>8d} !NTITLE\n\n".format(0))
+            
+            ## ATOMS section
+            fh.write("{:>8d} !NATOM\n".format(len(self.particles)))
+
+            ## From vmd/plugins/molfile_plugin/src/psfplugin.c
+            ## "%d %7s %10s %7s %7s %7s %f %f"
+            formatString = "{idx:>8d} {segname:7.7s} {resid:<10.10s} {resname:7.7s}" + \
+                           " {name:7.7s} {type:7.7s} {charge:f} {mass:f}\n"
+            for p in self.particles:
+                data = p._get_psfpdb_dictionary()
+                data['resid'] = "%d%c%c" % (data['resid']," "," ") # TODO: work with large indices
+                fh.write( formatString.format(**data) )
+            fh.write("\n")
+
+            ## Write out bonds
+            bonds = self.get_bonds()
+            fh.write("{:>8d} !NBOND\n".format(len(bonds)))
+            counter = 0
+            for p1,p2,b,ex in bonds:
+                fh.write( "{:>8d}{:>8d}".format(p1.idx+1,p2.idx+1) )
+                counter += 1
+                if counter == 4:
+                    fh.write("\n")
+                    counter = 0
+                else:
+                    fh.write(" ")
+            fh.write("\n" if counter == 0 else "\n\n")
+
+            ## Write out angles
+            angles = self.get_angles()
+            fh.write("{:>8d} !NTHETA\n".format(len(angles)))
+            counter = 0
+            for p1,p2,p3,a in angles:
+                fh.write( "{:>8d}{:>8d}{:>8d}".format(p1.idx+1,p2.idx+1,p3.idx+1) )
+                counter += 1
+                if counter == 3:
+                    fh.write("\n")
+                    counter = 0
+                else:
+                    fh.write(" ")
+            fh.write("\n" if counter == 0 else "\n\n")
+
+            ## Write out dihedrals
+            dihedrals = self.get_dihedrals()
+            fh.write("{:>8d} !NPHI\n".format(len(dihedrals)))
+            counter = 0
+            for p1,p2,p3,p4,a in dihedrals:
+                fh.write( "{:>8d}{:>8d}{:>8d}{:>8d}".format(p1.idx+1,p2.idx+1,p3.idx+1,p4.idx+1) )
+                counter += 1
+                if counter == 2:
+                    fh.write("\n")
+                    counter = 0
+                else:
+                    fh.write(" ") 
+            fh.write("\n" if counter == 0 else "\n\n")
+
+            ## Write out impropers
+            impropers = self.get_impropers()
+            fh.write("{:>8d} !NIMPHI\n".format(len(impropers)))
+            counter = 0
+            for p1,p2,p3,p4,a in impropers:
+                fh.write( "{:>8d}{:>8d}{:>8d}{:>8d}".format(p1.idx+1,p2.idx+1,p3.idx+1,p4.idx+1) )
+                counter += 1
+                if counter == 2:
+                    fh.write("\n")
+                    counter = 0
+                else:
+                    fh.write(" ")
+            fh.write("\n" if counter == 0 else "\n\n")
+
+            fh.write("\n{:>8d} !NDON: donors\n\n\n".format(0))
+            fh.write("\n{:>8d} !NACC: acceptors\n\n\n".format(0))
+            fh.write("\n       0 !NNB\n\n")
+            natoms = len(self.particles)
+            for i in range(natoms//8):
+                fh.write("      0       0       0       0       0       0       0       0\n")
+            for i in range(natoms-8*(natoms//8)):
+                fh.write("      0")
+            fh.write("\n\n       1       0 !NGRP\n\n")
+
+
+class ArbdModel(PdbModel):
+    def __init__(self, children, origin=None, dimensions=(1000,1000,1000), temperature=291, timestep=50e-6,
+                 particle_integrator = 'Brown',
+                 cutoff=50, decomp_period=1000, pairlist_distance=None, nonbonded_resolution=0.1,
+                 remove_duplicate_bonded_terms=True, extra_bd_file_lines=""):
+
+        PdbModel.__init__(self, children, dimensions, remove_duplicate_bonded_terms)
+        self.origin = origin
+        self.temperature = temperature
+
+        self.timestep = timestep
+        self.cutoff  =  cutoff
+
+        self.particle_integrator = particle_integrator
+        
+        if pairlist_distance == None:
+            pairlist_distance = cutoff+30
+        
+        self.decomp_period = decomp_period
+        self.pairlist_distance = pairlist_distance
+
+        self.extra_bd_file_lines = extra_bd_file_lines
+
+        self.numParticles = 0
+        self.particles = []
+        self.type_counts = None
+
+        self.nbSchemes = []
+        self._nbParamFiles = [] # This could be made more robust
+        self.nbResolution = 0.1
+
+        self._written_bond_files = dict()        
+
+        self.cacheUpToDate = False
+
+    def clear_all(self, keep_children=False):
+        Parent.clear_all(self, keep_children=keep_children)
+        self.particles = []
+        self.numParticles = 0
+        self.type_counts = None
+        self._nbParamFiles = []
+        self._written_bond_files = dict()
+
+    def _getNbScheme(self, typeA, typeB):
+        scheme = None
+        for s,A,B in self.nbSchemes:
+            if A is None or B is None:
+                if A is None and B is None:
+                    return s
+                elif A is None and typeB.is_same_type(B):
+                    return s
+                elif B is None and typeA.is_same_type(A):
+                    return s
+            elif typeA.is_same_type(A) and typeB.is_same_type(B):
+                return s
+        raise Exception("No nonbonded scheme found for %s and %s" % (typeA.name, typeB.name))
+
+    def _countParticleTypes(self):
+        ## TODO: check for modifications to particle that require
+        ## automatic generation of new particle type
+        type_counts = dict()
+        for p in self:
+            t = p.type_
+            if t in type_counts:
+                type_counts[t] += 1
+            else:
+                type_counts[t] = 1
+        self.type_counts = type_counts
+
+    def _updateParticleOrder(self):
+        ## Create ordered list
+        self.particles = [p for p in self]
+        # self.particles = sorted(particles, key=lambda p: (p.type_, p.idx))
+        
+        ## Update particle indices
+        for p,i in zip(self.particles,range(len(self.particles))):
+            p.idx = i
+            
+        # self.initialCoords = np.array([p.initialPosition for p in self.particles])
+
+    def useNonbondedScheme(self, nbScheme, typeA=None, typeB=None):
+        self.add_nonbonded_scheme(nbScheme, typeA, typeB)
+
+    def add_nonbonded_scheme(self, nonbonded_scheme, typeA=None, typeB=None):
+        self.nbSchemes.append( (nonbonded_scheme, typeA, typeB) )
+        if typeA != typeB:
+            self.nbSchemes.append( (nonbonded_scheme, typeB, typeA) )
+
+    def simulate(self, output_name, output_directory='output', num_steps=100000000, timestep=None, gpu=0, output_period=1e4, arbd=None, directory='.', restart_file=None, replicas=1, log_file=None, dry_run = False):
+        assert(type(gpu) is int)
+        num_steps = int(num_steps)
+
+        d_orig = os.getcwd()
+        try:
+            if not os.path.exists(directory):
+                os.makedirs(directory)
+            os.chdir(directory)
+
+            if timestep is not None:
+                self.timestep = timestep
+
+            if self.cacheUpToDate == False: # TODO: remove cache?
+                self._countParticleTypes()
+                self._updateParticleOrder()
+
+            if output_directory == '': output_directory='.'
+
+            if dry_run:
+                if arbd is None: arbd='arbd'
+            else:
+                if arbd is None:
+                    for path in os.environ["PATH"].split(os.pathsep):
+                        path = path.strip('"')
+                        fname = os.path.join(path, "arbd")
+                        if os.path.isfile(fname) and os.access(fname, os.X_OK):
+                            arbd = fname
+                            break
+
+                if arbd is None: raise Exception("ARBD was not found")
+
+                if not os.path.exists(arbd):
+                    raise Exception("ARBD was not found")
+                if not os.path.isfile(arbd):
+                    raise Exception("ARBD was not found")
+                if not os.access(arbd, os.X_OK):
+                    raise Exception("ARBD is not executable")
+
+
+            if not os.path.exists(output_directory):
+                os.makedirs(output_directory)
+            elif not os.path.isdir(output_directory):
+                raise Exception("output_directory '%s' is not a directory!" % output_directory)
+
+
+            self.writePdb( output_name + ".pdb" )
+            self.writePsf( output_name + ".psf" )
+            self.writeArbdFiles( output_name, numSteps=num_steps, outputPeriod=output_period, restart_file=restart_file )
+            os.sync()
+
+            ## http://stackoverflow.com/questions/18421757/live-output-from-subprocess-command
+
+            cmd = [arbd, '-g', "%d" % gpu]
+            if replicas > 1:
+                cmd = cmd + ['-r',replicas]
+            cmd = cmd + ["%s.bd" % output_name, "%s/%s" % (output_directory, output_name)]
+            cmd = tuple(str(x) for x in cmd)
+
+            if dry_run:
+                print("Run with: %s" % " ".join(cmd))
+            else:
+                print("Running ARBD with: %s" % " ".join(cmd))
+                if log_file is None or (hasattr(log_file,'write') and callable(log_file.write)):
+                    fd = sys.stdout if log_file is None else log_file
+                    process = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
+                    for line in process.stdout:
+                        fd.write(line)
+                        fd.flush()
+                else:
+                    with open(log_file,'w') as fd:
+                        process = subprocess.Popen(cmd, stdout=log_file, universal_newlines=True)
+                        process.communicate()
+
+        except:
+            raise
+        finally:
+            os.chdir(d_orig)
+
+
+    # -------------------------- #
+    # Methods for printing model #
+    # -------------------------- #
+
+    def writeArbdFiles(self, prefix, numSteps=100000000, outputPeriod=10000, restart_file=None):
+        ## TODO: save and reference directories and prefixes using member data
+        d = self.potential_directory = "potentials"
+        if not os.path.exists(d):
+            os.makedirs(d)
+        self._restraint_filename = "%s/%s.restraint.txt" % (d, prefix)
+        self._bond_filename = "%s/%s.bonds.txt" % (d, prefix)
+        self._angle_filename = "%s/%s.angles.txt" % (d, prefix)
+        self._dihedral_filename = "%s/%s.dihedrals.txt" % (d, prefix)
+        self._exclusion_filename = "%s/%s.exculsions.txt" % (d, prefix)
+        
+        # self._writeArbdCoordFile( prefix + ".coord.txt" )
+        self._writeArbdParticleFile( prefix + ".particles.txt" )
+        self._writeArbdRestraintFile()
+        self._writeArbdBondFile()
+        self._writeArbdAngleFile()
+        self._writeArbdDihedralFile()
+        self._writeArbdExclusionFile()
+        self._writeArbdPotentialFiles( prefix, directory = d )
+        self._writeArbdConf( prefix, numSteps=numSteps, outputPeriod=outputPeriod, restart_file=restart_file )
+        
+    # def _writeArbdCoordFile(self, filename):
+    #     with open(filename,'w') as fh:
+    #         for p in self.particles:
+    #             fh.write("%f %f %f\n" % tuple(x for x in p.collapsedPosition()))
+
+    def _writeArbdParticleFile(self, filename):
+        with open(filename,'w') as fh:
+            if self.particle_integrator == "Brown":
+                for p in self.particles:
+                    data = tuple([p.idx,p.type_.name] + [x for x in p.collapsedPosition()])
+                    fh.write("ATOM %d %s %f %f %f\n" % data)
+            else:
+                for p in self.particles:
+                    data = [p.idx,p.type_.name] + [x for x in p.collapsedPosition()]
+                    try:
+                        data = data + p.momentum
+                    except:
+                        try:
+                            data = data + p.velocity*p.mass
+                        except:
+                            data = data + [0,0,0]
+                    fh.write("ATOM %d %s %f %f %f %f %f %f\n" % tuple(data))
+                
+    def _write_rigid_group_file(self, filename, groups):
+        with open(filename,'w') as fh:
+            for g in groups:
+                fh.write("#Group\n")
+                try:
+                    if len(g.trans_damping) != 3: raise
+                    fh.write(" ".join(str(v) for v in g.trans_damping) + " ")
+                except:
+                    raise ValueError("Group {} lacks 3-value 'trans_damping' attribute")
+                try:
+                    if len(g.rot_damping) != 3: raise
+                    fh.write(" ".join(str(v) for v in g.rot_damping) + " ")
+                except:
+                    raise ValueError("Group {} lacks 3-value 'rot_damping' attribute")
+                fh.write("{}\n".format(len(g)))
+                particles = [p for p in g]
+
+                def chunks(l, n):
+                    """Yield successive n-sized chunks from l."""
+                    for i in range(0, len(l), n):
+                        yield l[i:i + n]
+
+                for c in chunks(particles,8):
+                    fh.write(" ".join(str(p.idx) for p in c) + "\n")
+
+
+    def _writeArbdConf(self, prefix, randomSeed=None, numSteps=100000000, outputPeriod=10000, restart_file=None):
+        ## TODO: raise exception if _writeArbdPotentialFiles has not been called
+        filename = "%s.bd" % prefix
+
+        ## Prepare a dictionary to fill in placeholders in the configuration file
+        params = self.__dict__.copy() # get parameters from System object
+
+        if randomSeed is None:
+            params['randomSeed']     = ""
+        else:
+            params['randomSeed'] = "seed %s" % randomSeed
+        params['numSteps']       = int(numSteps)
+
+        # params['coordinateFile'] = "%s.coord.txt" % prefix
+        params['particleFile'] = "%s.particles.txt" % prefix
+        if restart_file is None:
+            params['restartCoordinates'] = ""
+        else:
+            params['restartCoordinates'] = "restartCoordinates %s" % restart_file
+        params['outputPeriod'] = outputPeriod
+
+        for k,v in zip('XYZ', self.dimensions):
+            params['dim'+k] = v
+
+        if self.origin is None:
+            for k,v in zip('XYZ', self.dimensions):
+                params['origin'+k] = -v*0.5
+        else:
+            for k,v in zip('XYZ', self.origin):
+                params['origin'+k] = v
+        
+        params['pairlist_distance'] -= params['cutoff'] 
+
+        """ Find rigid groups """
+        rigid_groups = []
+        def get_rigid_groups(parent):
+            ret_list = []
+            for c in parent.children:
+                is_rigid = c.rigid if 'rigid' in c.__dict__ else False
+                if is_rigid:
+                    rigid_groups.append(c)
+                elif isinstance(c,Group):
+                    get_rigid_groups(c)
+        get_rigid_groups(self)
+
+        if len(rigid_groups) > 0:
+            self.particle_integrator = 'FusDynamic'
+            rb_group_filename = "{}.rb-group.txt".format(prefix)
+            params['particle_integrator'] = """FusDynamics
+groupFileName {}
+scaleFactor 0.05""".format(rb_group_filename)
+            self._write_rigid_group_file(rb_group_filename, rigid_groups)
+
+        ## Actually write the file
+        with open(filename,'w') as fh:
+            fh.write("""{randomSeed}
+timestep {timestep}
+steps {numSteps}
+numberFluct 0                   # deprecated
+
+interparticleForce 1            # other values deprecated
+fullLongRange 0                 # deprecated
+temperature {temperature}
+ParticleDynamicType {particle_integrator}
+
+outputPeriod {outputPeriod}
+## Energy doesn't actually get printed!
+outputEnergyPeriod {outputPeriod}
+outputFormat dcd
+
+## Infrequent domain decomposition because this kernel is still very slow
+decompPeriod {decomp_period}
+cutoff {cutoff}
+pairlistDistance {pairlist_distance}
+
+origin {originX} {originY} {originZ}
+systemSize {dimX} {dimY} {dimZ}
+
+{extra_bd_file_lines}
+\n""".format(**params))
+            
+            ## Write entries for each type of particle
+            for pt,num in self.getParticleTypesAndCounts():
+                ## TODO create new particle types if existing has grid
+                particleParams = pt.__dict__.copy()
+                particleParams['num'] = num
+                if self.particle_integrator in ('Brown','Brownian'):
+                    try:
+                        D = pt.diffusivity
+                    except:
+                        """ units "k K/(amu/ns)" "AA**2/ns" """
+                        D = 831447.2 * self.temperature / (pt.mass * pt.damping_coefficient)
+                    particleParams['dynamics'] = 'diffusion {D}'.format(D = D)
+                elif self.particle_integrator in ('Langevin','FusDynamic'):
+                    try:
+                        gamma = pt.damping_coefficient
+                    except:
+                        """ units "k K/(AA**2/ns)" "amu/ns" """
+                        gamma = 831447.2 * self.temperature / (pt.mass*pt.diffusivity)
+                    particleParams['dynamics'] = """mass {mass}
+transDamping {g} {g} {g}
+""".format(mass=pt.mass, g=gamma)
+                else:
+                    raise ValueError("Unrecognized particle integrator '{}'".format(self.particle_integrator))
+                fh.write("""
+particle {name}
+num {num}
+{dynamics}
+""".format(**particleParams))
+                if 'grid' in particleParams:
+                    if not isinstance(pt.grid, list): pt.grid = [pt.grid]
+                    for g,s in pt.grid:
+                        ## TODO, use Path.relative_to?
+                        try:
+                            fh.write("gridFile {}\n".format(g.relative_to(os.getcwd())))
+                        except:
+                            fh.write("gridFile {}\n".format(g))
+
+                        fh.write("gridFileScale {}\n".format(s))
+
+                else:
+                    fh.write("gridFile {}/null.dx\n".format(self.potential_directory))
+
+            ## Write coordinates and interactions
+            fh.write("""
+## Input coordinates
+inputParticles {particleFile}
+{restartCoordinates}
+
+## Interaction potentials
+tabulatedPotential  1
+## The i@j@file syntax means particle type i will have NB interactions with particle type j using the potential in file
+""".format(**params))
+            for pair,f in zip(self._particleTypePairIter(), self._nbParamFiles):
+                i,j,t1,t2 = pair
+                fh.write("tabulatedFile %d@%d@%s\n" % (i,j,f))
+
+            ## Bonded interactions
+            restraints = self.get_restraints()
+            bonds = self.get_bonds()
+            angles = self.get_angles()
+            dihedrals = self.get_dihedrals()
+            exclusions = self.get_exclusions()
+
+            if len(bonds) > 0:
+                for b in list(set([b for i,j,b,ex in bonds])):
+                    fh.write("tabulatedBondFile %s\n" % b)
+
+            if len(angles) > 0:
+                for b in list(set([b for i,j,k,b in angles])):
+                    fh.write("tabulatedAngleFile %s\n" % b)
+
+            if len(dihedrals) > 0:
+                for b in list(set([b for i,j,k,l,b in dihedrals])):
+                    fh.write("tabulatedDihedralFile %s\n" % b)
+
+            if len(restraints) > 0:
+                fh.write("inputRestraints %s\n" % self._restraint_filename)
+            if len(bonds) > 0:
+                fh.write("inputBonds %s\n" % self._bond_filename)
+            if len(angles) > 0:
+                fh.write("inputAngles %s\n" % self._angle_filename)
+            if len(dihedrals) > 0:
+                fh.write("inputDihedrals %s\n" % self._dihedral_filename)
+            if len(exclusions) > 0:
+                fh.write("inputExcludes %s\n" % self._exclusion_filename)
+     
+        write_null_dx = False
+        for pt,num in self.getParticleTypesAndCounts():
+            if "grid" not in pt.__dict__: 
+                gridfile = "{}/null.dx".format(self.potential_directory)
+                with open(gridfile, 'w') as fh:
+                    fh.write("""object 1 class gridpositions counts  2 2 2
+origin {originX} {originY} {originZ}
+delta  {dimX} 0.000000 0.000000
+delta  0.000000 {dimY} 0.000000
+delta  0.000000 0.000000 {dimZ}
+object 2 class gridconnections counts  2 2 2
+object 3 class array type float rank 0 items 8 data follows
+0.0	0.0	0.0	
+0.0	0.0	0.0	
+0.0	0.0	
+attribute "dep" string "positions"
+object "density" class field 
+component "positions" value 1
+component "connections" value 2
+component "data" value 3
+""".format(**params))
+                    break
+
+    def getParticleTypesAndCounts(self):
+        ## TODO: remove(?)
+        return sorted( self.type_counts.items(), key=lambda x: x[0] )
+
+    def _particleTypePairIter(self):
+        typesAndCounts = self.getParticleTypesAndCounts()
+        for i in range(len(typesAndCounts)):
+            t1 = typesAndCounts[i][0]
+            for j in range(i,len(typesAndCounts)):
+                t2 = typesAndCounts[j][0]
+                yield( (i,j,t1,t2) )
+    
+    def _writeArbdPotentialFiles(self, prefix, directory = "potentials"):
+        try: 
+            os.makedirs(directory)
+        except OSError:
+            if not os.path.isdir(directory):
+                raise
+
+        pathPrefix = "%s/%s" % (directory,prefix)
+        self._writeNonbondedParameterFiles( pathPrefix + "-nb" )
+        # self._writeBondParameterFiles( pathPrefix )
+        # self._writeAngleParameterFiles( pathPrefix )
+        # self._writeDihedralParameterFiles( pathPrefix )
+                
+    def _writeNonbondedParameterFiles(self, prefix):
+        x = np.arange(0, self.cutoff, self.nbResolution)
+        for i,j,t1,t2 in self._particleTypePairIter():
+            f = "%s.%s-%s.dat" % (prefix, t1.name, t2.name)
+            scheme = self._getNbScheme(t1,t2)
+            scheme.write_file(f, t1, t2, rMax = self.cutoff)
+            self._nbParamFiles.append(f)
+
+    def _getNonbondedPotential(self,x,a,b):
+        return a*(np.exp(-x/b))    
+
+    def _writeArbdRestraintFile( self ):
+        with open(self._restraint_filename,'w') as fh:
+            for i,restraint in self.get_restraints():
+                item = [i.idx]
+                if len(restraint) == 1:
+                    item.append(restraint[0])
+                    item.extend(i.get_collapsed_position())
+                elif len(restraint) == 2:
+                    item.append(restraint[0])
+                    item.extend(restraint[1])
+                elif len(restraint) == 5:
+                    item.extend(restraint)
+                fh.write("RESTRAINT %d %f %f %f %f\n" % tuple(item))
+
+    def _writeArbdBondFile( self ):
+        for b in list( set( [b for i,j,b,ex in self.get_bonds()] ) ):
+            if type(b) is not str and not isinstance(b, Path):
+                b.write_file()
+
+        with open(self._bond_filename,'w') as fh:
+            for i,j,b,ex in self.get_bonds():
+                item = (i.idx, j.idx, str(b))
+                if ex:
+                    fh.write("BOND REPLACE %d %d %s\n" % item)
+                else:
+                    fh.write("BOND ADD %d %d %s\n" % item)
+
+    def _writeArbdAngleFile( self ):
+        for b in list( set( [b for i,j,k,b in self.get_angles()] ) ):
+            if type(b) is not str and not isinstance(b, Path):
+                b.write_file()
+
+        with open(self._angle_filename,'w') as fh:
+            for b in self.get_angles():
+                item = tuple([p.idx for p in b[:-1]] + [str(b[-1])])
+                fh.write("ANGLE %d %d %d %s\n" % item)
+
+    def _writeArbdDihedralFile( self ):
+        for b in list( set( [b for i,j,k,l,b in self.get_dihedrals()] ) ):
+            if type(b) is not str and not isinstance(b, Path):
+                b.write_file()
+
+        with open(self._dihedral_filename,'w') as fh:
+            for b in self.get_dihedrals():
+                item = tuple([p.idx for p in b[:-1]] + [str(b[-1])])
+                fh.write("DIHEDRAL %d %d %d %d %s\n" % item)
+
+    def _writeArbdExclusionFile( self ):
+        with open(self._exclusion_filename,'w') as fh:
+            for ex in self.get_exclusions():
+                item = tuple(int(p.idx) for p in ex)
+                fh.write("EXCLUDE %d %d\n" % item)
+
+    def dimensions_from_structure( self, padding_factor=1.5, isotropic=False ):
+        ## TODO: cache coordinates using numpy arrays for quick min/max
+        raise(NotImplementedError)
+
+    def write_namd_configuration( self, output_name, num_steps = 1e6,
+                                  output_directory = 'output',
+                                  update_dimensions=True, extrabonds=True ):
+
+        format_data = self.__dict__.copy() # get parameters from System object
+
+        format_data['extrabonds'] = """extraBonds on
+extraBondsFile $prefix.exb
+""" if extrabonds else ""
+
+        if self.useTclForces:
+            format_data['margin'] = ""
+            format_data['tcl_forces'] = """tclForces on
+tclForcesScript $prefix.forces.tcl
+"""
+        else:
+            format_data['margin'] = """margin              30
+"""
+            format_data['tcl_forces'] = ""
+
+        if update_dimensions:
+            format_data['dimensions'] = self.dimensions_from_structure()
+
+        for k,v in zip('XYZ', format_data['dimensions']):
+            format_data['origin'+k] = -v*0.5
+            format_data['cell'+k] = v
+
+        format_data['prefix'] = output_name
+        format_data['num_steps'] = int(num_steps//12)*12
+        format_data['output_directory'] = output_directory
+        filename = '{}.namd'.format(output_name)
+
+        with open(filename,'w') as fh:
+            fh.write("""
+set prefix {prefix}
+set nLast 0;			# increment when continueing a simulation
+set n [expr $nLast+1]
+set out {output_directory}/$prefix-$n
+set temperature {temperature}
+
+structure          $prefix.psf
+coordinates        $prefix.pdb
+
+outputName         $out
+XSTfile            $out.xst
+DCDfile            $out.dcd
+
+#############################################################
+## SIMULATION PARAMETERS                                   ##
+#############################################################
+
+# Input
+paraTypeCharmm	    on
+parameters          charmm36.nbfix/par_all36_na.prm
+parameters	    charmm36.nbfix/par_water_ions_na.prm
+
+wrapAll             off
+
+# Force-Field Parameters
+exclude             scaled1-4
+1-4scaling          1.0
+switching           on
+switchdist           8
+cutoff              10
+pairlistdist        12
+{margin}
+
+# Integrator Parameters
+timestep            2.0  ;# 2fs/step
+rigidBonds          all  ;# needed for 2fs steps
+nonbondedFreq       1
+fullElectFrequency  3
+stepspercycle       12
+
+# PME (for full-system periodic electrostatics)
+PME                 no
+PMEGridSpacing      1.2
+
+# Constant Temperature Control
+langevin            on    ;# do langevin dynamics
+# langevinDamping     1   ;# damping coefficient (gamma); used in original study
+langevinDamping     0.1   ;# less friction for faster relaxation
+langevinTemp        $temperature
+langevinHydrogen    off    ;# don't couple langevin bath to hydrogens
+
+# output
+useGroupPressure    yes
+xstFreq             4800
+outputEnergies      4800
+dcdfreq             4800
+restartfreq         48000
+
+#############################################################
+## EXTRA FORCES                                            ##
+#############################################################
+
+# ENM and intrahelical extrabonds
+{extrabonds}
+{tcl_forces}
+
+#############################################################
+## RUN                                                     ##
+#############################################################
+
+# Continuing a job from the restart files
+cellBasisVector1 {cellX} 0 0
+cellBasisVector2 0 {cellY} 0
+cellBasisVector3 0 0 {cellZ}
+
+if {{$nLast == 0}} {{
+    temperature 300
+    fixedAtoms on
+    fixedAtomsForces on
+    fixedAtomsFile $prefix.fixed.pdb
+    fixedAtomsCol B
+    minimize 2400
+    fixedAtoms off
+    minimize 2400
+}} else {{
+    bincoordinates  {output_directory}/$prefix-$nLast.restart.coor
+    binvelocities   {output_directory}/$prefix-$nLast.restart.vel
+}}
+
+run {num_steps:d}
+""".format(**format_data))
+
+    def atomic_simulate(self, output_name, output_directory='output', dry_run = False, namd2=None, log_file=None, num_procs=None, gpu=None):
+        if self.cacheUpToDate == False: # TODO: remove cache?
+            self._countParticleTypes()
+            self._updateParticleOrder()
+
+        if output_directory == '': output_directory='.'
+        self.writePdb( output_name + ".pdb" )
+        self.writePdb( output_name + ".fixed.pdb", beta_from_fixed=True )
+        self.writePsf( output_name + ".psf" )
+        self.write_namd_configuration( output_name, output_directory = output_directory )
+        os.sync()
+
+        if not dry_run:
+            if namd2 is None:
+                for path in os.environ["PATH"].split(os.pathsep):
+                    path = path.strip('"')
+                    fname = os.path.join(path, "namd2")
+                    if os.path.isfile(fname) and os.access(fname, os.X_OK):
+                        namd2 = fname
+                        break
+
+            if namd2 is None: raise Exception("NAMD2 was not found")
+
+            if not os.path.exists(namd2):
+                raise Exception("NAMD2 was not found")
+            if not os.path.isfile(namd2):
+                raise Exception("NAMD2 was not found")
+            if not os.access(namd2, os.X_OK):
+                raise Exception("NAMD2 is not executable")
+
+            if not os.path.exists(output_directory):
+                os.makedirs(output_directory)
+            elif not os.path.isdir(output_directory):
+                raise Exception("output_directory '%s' is not a directory!" % output_directory)
+
+            if num_procs is None:
+                import multiprocessing
+                num_procs = max(1,multiprocessing.cpu_count()-1)
+
+            cmd = [namd2, '+p{}'.format(num_procs), "%s.namd" % output_name]
+            cmd = tuple(str(x) for x in cmd)
+
+            print("Running NAMD2 with: %s" % " ".join(cmd))
+            if log_file is None or (hasattr(log_file,'write') and callable(log_file.write)):
+                fd = sys.stdout if log_file is None else log_file
+                process = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
+                for line in process.stdout:
+                    fd.write(line)
+                    fd.flush()
+            else:
+                with open(log_file,'w') as fd:
+                    process = subprocess.Popen(cmd, stdout=log_file, universal_newlines=True)
+                    process.communicate()
diff --git a/mrdna/arbdmodel/abstract_polymer.py b/mrdna/arbdmodel/abstract_polymer.py
new file mode 100644
index 0000000000000000000000000000000000000000..732a9562645669297d7b4ea6b1218fe302815faa
--- /dev/null
+++ b/mrdna/arbdmodel/abstract_polymer.py
@@ -0,0 +1,548 @@
+from pathlib import Path
+from copy import copy, deepcopy
+
+import numpy as np
+from scipy import interpolate
+
+from . import ArbdModel
+from .coords import rotationAboutAxis, quaternion_from_matrix, quaternion_to_matrix
+
+
+
+"""
+TODO:
+ - test for large systems
+ - rework Location class 
+ - remove recursive calls
+ - document
+ - develop unit test suite
+"""
+
+# class ParticleNotConnectedError(Exception):
+#     pass
+
+class Location():
+    """ Site for connection within an object """
+    def __init__(self, parent, contour_position, type_, on_fwd_strand = True):
+        ## TODO: remove cyclic references(?)
+        assert( isinstance(parent, ConnectableElement) )
+        self.parent = parent
+        self.contour_position = contour_position  # represents position along contour length in polymer
+        self.type_ = type_
+        # self.particle = None
+        self.connection = None
+
+    def get_connected_location(self):
+        if self.connection is None:
+            return None
+        else:
+            return self.connection.other(self)
+
+    def set_connection(self, connection):
+        self.connection = connection # TODO weakref? 
+
+    def get_monomer_index(self):
+        try:
+            idx = self.parent.contour_to_monomer_index(self.contour_position, nearest_monomer=True)
+        except:
+            if self.contour_position == 0:
+                idx = 0
+            elif self.contour_position == 1:
+                idx = self.parent.num_monomers-1
+            else:
+                raise
+        return idx
+
+    def __repr__(self):
+        if self.on_fwd_strand:
+            on_fwd = "on_fwd_strand"
+        else:
+            on_fwd = "on_rev_strand"
+        return "<Location {}.{}[{:.2f},{:d}]>".format( self.parent.name, self.type_, self.contour_position, self.on_fwd_strand)
+        
+class Connection():
+    """ Class for connecting two elements """
+    def __init__(self, A, B, type_ = None):
+        assert( isinstance(A,Location) )
+        assert( isinstance(B,Location) )
+        self.A = A
+        self.B = B
+        self.type_ = type_
+        
+    def other(self, location):
+        if location is self.A:
+            return self.B
+        elif location is self.B:
+            return self.A
+        else:
+            raise ValueError
+
+    def delete(self):
+        self.A.parent.connections.remove(self)
+        if self.B.parent is not self.A.parent:
+            self.B.parent.connections.remove(self)
+        self.A.connection = None
+        self.B.connection = None
+
+    def __repr__(self):
+        return "<Connection {}--{}--{}]>".format( self.A, self.type_, self.B )
+        
+class ConnectableElement():
+    """ Abstract base class """
+    def __init__(self, connection_locations=None, connections=None):
+        if connection_locations is None: connection_locations = []
+        if connections is None: connections = []
+
+        ## TODO decide on names
+        self.locations = self.connection_locations = connection_locations
+        self.connections = connections
+
+    def get_locations(self, type_=None, exclude=()):
+        locs = [l for l in self.connection_locations if (type_ is None or l.type_ == type_) and l.type_ not in exclude]
+        counter = dict()
+        for l in locs:
+            if l in counter:
+                counter[l] += 1
+            else:
+                counter[l] = 1
+        assert( np.all( [counter[l] == 1 for l in locs] ) )
+        return locs
+
+    def get_location_at(self, contour_position, on_fwd_strand=True, new_type="crossover"):
+        loc = None
+        if (self.num_monomers == 1):
+            ## Assumes that intrahelical connections have been made before crossovers
+            for l in self.locations:
+                if l.on_fwd_strand == on_fwd_strand and l.connection is None:
+                    assert(loc is None)
+                    loc = l
+            # assert( loc is not None )
+        else:
+            for l in self.locations:
+                if l.contour_position == contour_position and l.on_fwd_strand == on_fwd_strand:
+                    assert(loc is None)
+                    loc = l
+        if loc is None:
+            loc = Location( self, contour_position=contour_position, type_=new_type, on_fwd_strand=on_fwd_strand )
+        return loc
+
+    def get_connections_and_locations(self, connection_type=None, exclude=()):
+        """ Returns a list with each entry of the form:
+            connection, location_in_self, location_in_other """
+        type_ = connection_type
+        ret = []
+        for c in self.connections:
+            if (type_ is None or c.type_ == type_) and c.type_ not in exclude:
+                if   c.A.parent is self:
+                    ret.append( [c, c.A, c.B] )
+                elif c.B.parent is self:
+                    ret.append( [c, c.B, c.A] )
+                else:
+                    import pdb
+                    pdb.set_trace()
+                    raise Exception("Object contains connection that fails to refer to object")
+        return ret
+
+    def _connect(self, other, connection):
+        ## TODO fix circular references        
+        A,B = [connection.A, connection.B]
+            
+        A.connection = B.connection = connection
+        self.connections.append(connection)
+        if other is not self:
+            other.connections.append(connection)
+        else:
+            raise NotImplementedError("Objects cannot yet be connected to themselves; if you are attempting to make a circular object, try breaking the object into multiple components")
+        l = A.parent.locations
+        if A not in l: l.append(A)
+        l = B.parent.locations
+        if B not in l: l.append(B)
+
+
+class PolymerSection(ConnectableElement):
+    """ Base class that describes a linear section of a polymer """
+
+    def __init__(self, name, num_monomers,
+                 monomer_length,
+                 start_position = None,
+                 end_position = None, 
+                 parent = None,
+                 **kwargs):
+        
+        ConnectableElement.__init__(self, connection_locations=[], connections=[])
+
+        if 'segname' not in kwargs:
+            self.segname = name
+
+        for key,val in kwargs.items():
+            self.__dict__[key] = val
+
+        self.num_monomers = int(num_monomers)
+        self.monomer_length = monomer_length
+        
+        if start_position is None: start_position = np.array((0,0,0))
+
+        if end_position is None:
+            end_position = np.array((0,0,self.monomer_length*num_monomers)) + start_position
+        self.start_position = start_position
+        self.end_position = end_position
+
+        self.start_orientation = None
+
+        ## Set up interpolation for positions
+        self._set_splines_from_ends()
+
+        # self.sequence = None
+
+    def __repr__(self):
+        return "<{} {}[{:d}]>".format( type(self), self.name, self.num_monomers )
+
+    def set_splines(self, contours, coords):
+        tck, u = interpolate.splprep( coords.T, u=contours, s=0, k=1)
+        self.position_spline_params = (tck,u)
+
+    def set_orientation_splines(self, contours, quaternions):
+        tck, u = interpolate.splprep( quaternions.T, u=contours, s=0, k=1)
+        self.quaternion_spline_params = (tck,u)
+
+    def get_center(self):
+        tck, u = self.position_spline_params
+        return np.mean(self.contour_to_position(u), axis=0)
+
+    def _get_location_positions(self):
+        return [self.contour_to_monomer_index(l.contour_position) for l in self.locations]
+
+    def insert_monomers(self, at_monomer: int, num_monomer: int, seq=tuple()):
+        assert(np.isclose(np.around(num_monomer),num_monomer))
+        if at_monomer < 0:
+            raise ValueError("Attempted to insert DNA into {} at a negative location".format(self))
+        if at_monomer > self.num_monomer-1:
+            raise ValueError("Attempted to insert DNA into {} at beyond the end of the Polymer".format(self))
+        if num_monomers < 0:
+            raise ValueError("Attempted to insert DNA a negative amount of DNA into {}".format(self))
+
+        num_monomers = np.around(num_monomer)
+        monomer_positions = self._get_location_positions()
+        new_monomer_positions = [p if p <= at_monomer else p+num_monomers for p in monomer_positions]
+
+        ## TODO: handle sequence
+
+        self.num_monomers = self.num_monomer+num_monomer
+
+        for l,p in zip(self.locations, new_monomer_positions):
+            l.contour_position = self.monomer_index_to_contour(p)
+
+    def remove_monomers(self, first_monomer: int, last_monomer: int):
+        """ Removes nucleotides between first_monomer and last_monomer, inclusive """
+        assert(np.isclose(np.around(first_monomer),first_monomer))
+        assert(np.isclose(np.around(last_monomer),last_monomer))
+        tmp = min((first_monomer,last_monomer))
+        last_monomer = max((first_monomer,last_monomer))
+        fist_monomer = tmp
+
+        if first_monomer < 0 or first_monomer > self.num_monomer-2:
+            raise ValueError("Attempted to remove DNA from {} starting at an invalid location {}".format(self, first_monomer))
+        if last_monomer < 1 or last_monomer > self.num_monomer-1:
+            raise ValueError("Attempted to remove DNA from {} ending at an invalid location {}".format(self, last_monomer))
+        if first_monomer == last_monomer:
+            return
+
+        first_monomer = np.around(first_monomer)
+        last_monomer = np.around(last_monomer)
+
+        monomer_positions = self._get_location_positions()
+
+        bad_locations = list(filter(lambda p: p >= first_monomer and p <= last_monomer, monomer_positions))
+        if len(bad_locations) > 0:
+            raise Exception("Attempted to remove DNA containing locations {} from {} between {} and {}".format(bad_locations,self,first_monomer,last_monomer))
+
+        removed_monomer = last_monomer-first_monomer+1
+        new_monomer_positions = [p if p <= last_monomer else p-removed_monomer for p in monomer_positions]
+        num_monomers = self.num_monomer-removed_monomer
+
+        if self.sequence is not None and len(self.sequence) == self.num_monomer:
+            self.sequence = [s for s,i in zip(self.sequence,range(self.num_monomer)) 
+                                if i < first_monomer or i > last_monomer]
+            assert( len(self.sequence) == num_monomers )
+
+        self.num_monomers = num_monomers
+
+        for l,p in zip(self.locations, new_monomer_positions):
+            l.contour_position = self.monomer_position_to_contour(p)
+
+    def __filter_contours(contours, positions, position_filter, contour_filter):
+        u = contours
+        r = positions
+
+        ## Filter
+        ids = list(range(len(u)))
+        if contour_filter is not None:
+            ids = list(filter(lambda i: contour_filter(u[i]), ids))
+        if position_filter is not None:
+            ids = list(filter(lambda i: position_filter(r[i,:]), ids))
+        return ids
+
+    def translate(self, translation_vector, position_filter=None, contour_filter=None):
+        dr = np.array(translation_vector)
+        tck, u = self.position_spline_params
+        r = self.contour_to_position(u)
+
+        ids = PolymerSection.__filter_contours(u, r, position_filter, contour_filter)
+        if len(ids) == 0: return
+
+        ## Translate
+        r[ids,:] = r[ids,:] + dr[np.newaxis,:]
+        self.set_splines(u,r)
+
+    def rotate(self, rotation_matrix, about=None, position_filter=None, contour_filter=None):
+        tck, u = self.position_spline_params
+        r = self.contour_to_position(u)
+
+        ids = PolymerSection.__filter_contours(u, r, position_filter, contour_filter)
+        if len(ids) == 0: return
+
+        if about is None:
+            ## TODO: do this more efficiently
+            r[ids,:] = np.array([rotation_matrix.dot(r[i,:]) for i in ids])
+        else:
+            dr = np.array(about)
+            ## TODO: do this more efficiently
+            r[ids,:] = np.array([rotation_matrix.dot(r[i,:]-dr) + dr for i in ids])
+
+        self.set_splines(u,r)
+
+        if self.quaternion_spline_params is not None:
+            ## TODO: performance: don't shift between quaternion and matrix representations so much
+            tck, u = self.quaternion_spline_params
+            orientations = [self.contour_to_orientation(v) for v in u]
+            for i in ids:
+                orientations[i,:] = rotation_matrix.dot(orientations[i])
+            quats = [quaternion_from_matrix(o) for o in orientations]
+            self.set_orientation_splines(u, quats)
+
+    def _set_splines_from_ends(self, resolution=4):
+        self.quaternion_spline_params = None
+        r0 = np.array(self.start_position)[np.newaxis,:]
+        r1 = np.array(self.end_position)[np.newaxis,:]
+        u = np.linspace(0,1, max(3,self.num_monomers//int(resolution)))
+        s = u[:,np.newaxis]
+        coords = (1-s)*r0 + s*r1
+        self.set_splines(u, coords)
+
+    def contour_to_monomer_index(self, contour_pos, nearest_monomer=False):
+        idx = contour_pos*(self.num_monomer) - 0.5
+        if nearest_monomer:
+            assert( np.isclose(np.around(idx),idx) )
+            idx = np.around(idx)
+        return idx
+
+    def monomer_index_to_contour(self,monomer_pos):
+        return (monomer_pos+0.5)/(self.num_monomers)
+
+    def contour_to_position(self,s):
+        p = interpolate.splev( s, self.position_spline_params[0] )
+        if len(p) > 1: p = np.array(p).T
+        return p
+
+    def contour_to_tangent(self,s):
+        t = interpolate.splev( s, self.position_spline_params[0], der=1 )
+        t = (t / np.linalg.norm(t,axis=0))
+        return t.T
+        
+
+    def contour_to_orientation(self,s):
+        assert( isinstance(s,float) or isinstance(s,int) or len(s) == 1 )   # TODO make vectorized version
+
+        if self.quaternion_spline_params is None:
+            axis = self.contour_to_tangent(s)
+            axis = axis / np.linalg.norm(axis)
+            rotAxis = np.cross(axis,np.array((0,0,1)))
+            rotAxisL = np.linalg.norm(rotAxis)
+            zAxis = np.array((0,0,1))
+
+            if rotAxisL > 0.001:
+                theta = np.arcsin(rotAxisL) * 180/np.pi
+                if axis.dot(zAxis) < 0: theta = 180-theta
+                orientation0 = rotationAboutAxis( rotAxis/rotAxisL, theta, normalizeAxis=False ).T
+            else:
+                orientation0 = np.eye(3) if axis.dot(zAxis) > 0 else \
+                               rotationAboutAxis( np.array((1,0,0)), 180, normalizeAxis=False )
+            if self.start_orientation is not None:
+                orientation0 = orientation0.dot(self.start_orientation)
+
+            # orientation = rotationAboutAxis( axis, self.twist_per_nt*self.contour_to_monomer_index(s), normalizeAxis=False )
+            # orientation = orientation.dot(orientation0)
+            orientation = orientation0
+        else:
+            q = interpolate.splev( s, self.quaternion_spline_params[0] )
+            if len(q) > 1: q = np.array(q).T # TODO: is this needed?
+            orientation = quaternion_to_matrix(q)
+
+        return orientation
+
+    def get_contour_sorted_connections_and_locations(self,type_):
+        sort_fn = lambda c: c[1].contour_position
+        cl = self.get_connections_and_locations(type_)
+        return sorted(cl, key=sort_fn)
+    
+    def add_location(self, nt, type_, on_fwd_strand=True):
+        ## Create location if needed, add to polymer
+        c = self.monomer_index_to_contour(nt)
+        assert(c >= 0 and c <= 1)
+        # TODO? loc = self.Location( contour_position=c, type_=type_, on_fwd_strand=is_fwd )
+        loc = Location( self, contour_position=c, type_=type_, on_fwd_strand=on_fwd_strand )
+        self.locations.append(loc)
+
+    def iterate_connections_and_locations(self, reverse=False):
+        ## connections to other polymers
+        cl = self.get_contour_sorted_connections_and_locations()
+        if reverse:
+            cl = cl[::-1]
+            
+        for c in cl:
+            yield c
+            
+class AbstractPolymerGroup():
+    def __init__(self, polymers=[],
+                 **kwargs):
+
+        """ Simulation system parameters """
+        ## TODO decide whether to move these elsewhere
+        # self.dimensions = dimensions
+        # self.temperature = temperature
+        # self.timestep = timestep
+        # self.cutoff = cutoff
+        # self.decomposition_period = decomposition_period
+        # self.pairlist_distance = pairlist_distance
+        # self.nonbonded_resolution = nonbonded_resolution
+        self.polymers = polymers
+
+        self.grid_potentials = []
+
+        # self.useNonbondedScheme( nbDnaScheme )
+
+    def get_connections(self,type_=None,exclude=()):
+        """ Find all connections in model, without double-counting """
+        added=set()
+        ret=[]
+        for s in self.polymers:
+            items = [e for e in s.get_connections_and_locations(type_,exclude=exclude) if e[0] not in added]
+            added.update([e[0] for e in items])
+            ret.extend( list(sorted(items,key=lambda x: x[1].contour_position)) )
+        return ret
+    
+    def extend(self, other, copy=True, include_strands=False):
+        assert( isinstance(other, PolymerSectionModel) )
+        if copy:
+            for s in other.polymers:
+                self.polymers.append(deepcopy(s))
+            if include_strands:
+                for s in other.strands:
+                    self.strands.append(deepcopy(s))
+        else:
+            for s in other.polymers:
+                self.polymers.append(s)
+            if include_strands:
+                for s in other.strands:
+                    self.strands.append(s)
+        self._clear_beads()
+
+    def update(self, polymer , copy=False):
+        assert( isinstance(polymer, PolymerSection) )
+        if copy:
+            polymer = deepcopy(polymer)
+        self.polymers.append(polymer)
+    
+    """ Operations on spline coordinates """
+    def translate(self, translation_vector, position_filter=None):
+        for s in self.polymers:
+            s.translate(translation_vector, position_filter=position_filter)
+        
+    def rotate(self, rotation_matrix, about=None, position_filter=None):
+        for s in self.polymers:
+            s.rotate(rotation_matrix, about=about, position_filter=position_filter)
+
+    def get_center(self, include_ssdna=False):
+        if include_ssdna:
+            polymers = self.polymers
+        else:
+            polymers = list(filter(lambda s: isinstance(s,DoubleStrandedPolymerSection), 
+                                   self.polymers))
+        centers = [s.get_center() for s in polymers]
+        weights = [s.num_monomers*2 if isinstance(s,DoubleStrandedPolymerSection) else s.num_monomers for s in polymers]
+        # centers,weights = [np.array(a) for a in (centers,weights)]
+        return np.average( centers, axis=0, weights=weights)
+
+    def dimensions_from_structure( self, padding_factor=1.5, isotropic=False ):
+        positions = []
+        for s in self.polymers:
+            positions.append(s.contour_to_position(0))
+            positions.append(s.contour_to_position(0.5))
+            positions.append(s.contour_to_position(1))
+        positions = np.array(positions)
+        dx,dy,dz = [(np.max(positions[:,i])-np.min(positions[:,i])+30)*padding_factor for i in range(3)]
+        if isotropic:
+            dx = dy = dz = max((dx,dy,dz))
+        return [dx,dy,dz]
+
+    def add_grid_potential(self, grid_file, scale=1, per_monomer=True):
+        grid_file = Path(grid_file)
+        if not grid_file.is_file():
+            raise ValueError("Grid file {} does not exist".format(grid_file))
+        if not grid_file.is_absolute():
+            grid_file = Path.cwd() / grid_file
+        self.grid_potentials.append((grid_file,scale,per_,pmp,er))
+
+    def vmd_tube_tcl(self, file_name="drawTubes.tcl", radius=5):
+        with open(file_name, 'w') as tclFile:
+            tclFile.write("## beginning TCL script \n")
+
+            def draw_tube(polymer,radius_value=10, color="cyan", resolution=5):
+                tclFile.write("## Tube being drawn... \n")
+                
+                contours = np.linspace(0,1, max(2,1+polymer.num_monomers//resolution) )
+                rs = [polymer.contour_to_position(c) for c in contours]
+               
+                radius_value = str(radius_value)
+                tclFile.write("graphics top color {} \n".format(str(color)))
+                for i in range(len(rs)-2):
+                    r0 = rs[i]
+                    r1 = rs[i+1]
+                    filled = "yes" if i in (0,len(rs)-2) else "no"
+                    tclFile.write("graphics top cylinder {{ {} {} {} }} {{ {} {} {} }} radius {} resolution 30 filled {} \n".format(r0[0], r0[1], r0[2], r1[0], r1[1], r1[2], str(radius_value), filled))
+                    tclFile.write("graphics top sphere {{ {} {} {} }} radius {} resolution 30\n".format(r1[0], r1[1], r1[2], str(radius_value)))
+                r0 = rs[-2]
+                r0 = rs[-1]
+                tclFile.write("graphics top cylinder {{ {} {} {} }} {{ {} {} {} }} radius {} resolution 30 filled yes \n".format(r0[0], r0[1], r0[2], r1[0], r1[1], r1[2], str(radius_value)))
+
+            ## material
+            tclFile.write("graphics top materials on \n")
+            tclFile.write("graphics top material AOEdgy \n")
+            
+            ## iterate through the model polymers
+            for s in self.polymers:
+                draw_tube(s,radius,"cyan")
+
+
+    def vmd_cylinder_tcl(self, file_name="drawCylinders.tcl", radius=5):
+
+        with open(file_name, 'w') as tclFile:
+            tclFile.write("## beginning TCL script \n")
+            def draw_cylinder(polymer,radius_value=10,color="cyan"):
+                tclFile.write("## cylinder being drawn... \n")
+                r0 = polymer.contour_to_position(0)
+                r1 = polymer.contour_to_position(1)
+                
+                radius_value = str(radius_value)
+                color = str(color)
+                
+                tclFile.write("graphics top color {} \n".format(color))
+                tclFile.write("graphics top cylinder {{ {} {} {} }} {{ {} {} {} }} radius {} resolution 30 filled yes \n".format(r0[0], r0[1], r0[2], r1[0], r1[1], r1[2], radius_value))
+
+            ## material
+            tclFile.write("graphics top materials on \n")
+            tclFile.write("graphics top material AOEdgy \n")
+            
+            ## iterate through the model polymers
+            for s in self.polymers:
+                draw_cylinder(s,radius,"cyan")
diff --git a/mrdna/arbdmodel/coords.py b/mrdna/arbdmodel/coords.py
new file mode 100644
index 0000000000000000000000000000000000000000..41628e83501c17098094fc12b7d4d4e6594ebcb6
--- /dev/null
+++ b/mrdna/arbdmodel/coords.py
@@ -0,0 +1,204 @@
+import numpy as np
+from scipy.optimize import newton
+
+def minimizeRmsd(coordsB, coordsA, weights=None, maxIter=100):
+    ## Going through many iterations wasn't really needed
+    tol = 1
+    count = 0
+
+    R = np.eye(3)
+    comB = np.zeros([3,])
+    cNext = coordsB
+
+    while tol > 1e-6:
+        q,cB,comA = _minimizeRmsd(cNext,coordsA, weights)
+        R = R.dot(quaternion_to_matrix(q))
+        assert( np.all(np.isreal( R )) )
+
+        comB += cB
+        cLast = cNext
+        cNext = (coordsB-comB).dot(R)
+
+        tol = np.sum(((cNext-cLast)**2)[:]) / np.max(np.shape(coordsB))
+        if count > maxIter:
+            Exception("Exceeded maxIter (%d)" % maxIter)
+        count += 1
+
+    print("%d iterations",count)
+    return R, comB, comA
+
+
+def minimizeRmsd(coordsB, coordsA, weights=None):
+    q,comA,comB = _minimizeRmsd(coordsB, coordsA, weights)
+    assert( np.all(np.isreal( q )) )
+    return quaternion_to_matrix(q),comA,comB
+
+
+## http://onlinelibrary.wiley.com/doi/10.1002/jcc.21439/full
+def _minimizeRmsd(coordsB, coordsA, weights=None):
+    A = coordsA
+    B = coordsB
+
+    shapeA,shapeB = [np.shape(X) for X in (A,B)]
+    for s in (shapeA,shapeB):  assert( len(s) == 2 )
+
+    A,B = [X.T if s[1] > s[0] else X for X,s in zip([A,B],(shapeA,shapeB))] # TODO: print warning
+
+    shapeA,shapeB = [np.shape(X) for X in (A,B)]
+    assert( shapeA == shapeB )
+    for X,s in zip((A,B),(shapeA,shapeB)):
+        assert( s[1] == 3 and s[0] >= s[1] )
+    
+    # if weights is None: weights = np.ones(len(A))
+    if weights is None:
+        comA,comB = [np.mean( X, axis=0 ) for X in (A,B)]
+    else:
+        assert( len(weights[:]) == len(B) )
+        W = np.diag(weights)
+        comA,comB = [np.sum( W.dot(X), axis=0 ) / np.sum(W) for X in (A,B)]
+
+    A = np.array( A-comA )
+    B = np.array( B-comB )
+
+    if weights is None:
+        s = A.T.dot(B)
+    else:
+        s = A.T.dot(W.dot(B))
+    
+    sxx,sxy,sxz = s[0,:]
+    syx,syy,syz = s[1,:]
+    szx,szy,szz = s[2,:]
+    
+    K = [[ sxx+syy+szz, syz-szy, szx-sxz, sxy-syx],
+         [syz-szy,  sxx-syy-szz, sxy+syx, sxz+szx],
+         [szx-sxz, sxy+syx, -sxx+syy-szz, syz+szy],
+         [sxy-syx, sxz+szx, syz+szy, -sxx-syy+szz]]
+    K = np.array(K)
+
+    # GA = np.trace( A.T.dot(W.dot(A)) )
+    # GB = np.trace( B.T.dot(W.dot(B)) )
+        
+    ## Finding GA/GB can be done more quickly
+    # I = np.eye(4)
+    # x0 = (GA+GB)*0.5
+    # vals = newtoon(lambda x: np.det(K-x*I), x0 = x0)
+
+    vals, vecs = np.linalg.eig(K)
+    i = np.argmax(vals)
+    q = vecs[:,i]
+
+    # RMSD = np.sqrt( (GA+GB-2*vals[i]) / len(A) )
+    # print("CHECK:", K.dot(q)-vals[i]*q )
+    return q, comB, comA
+
+def quaternion_to_matrix(q):
+    assert(len(q) == 4)
+
+    ## It looks like the wikipedia article I used employed a less common convention for q (see below
+    ## http://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Rotation_matrix_.E2.86.94_quaternion
+    # q1,q2,q3,q4 = q
+    # R = [[1-2*(q2*q2 + q3*q3),    2*(q1*q2 - q3*q4),    2*(q1*q3 + q2*q4)],
+    #      [  2*(q1*q2 + q3*q4),  1-2*(q1*q1 + q3*q3),    2*(q2*q3 - q1*q4)],
+    #      [  2*(q1*q3 - q2*q4),    2*(q1*q4 + q2*q3),  1-2*(q2*q2 + q1*q1)]]
+
+    q = q / np.linalg.norm(q)
+    q0,q1,q2,q3 = q
+    R = [[1-2*(q2*q2 + q3*q3),    2*(q1*q2 - q3*q0),    2*(q1*q3 + q2*q0)],
+         [  2*(q1*q2 + q3*q0),  1-2*(q1*q1 + q3*q3),    2*(q2*q3 - q1*q0)],
+         [  2*(q1*q3 - q2*q0),    2*(q1*q0 + q2*q3),  1-2*(q2*q2 + q1*q1)]]
+
+    return np.array(R)
+
+def quaternion_from_matrix( R ):
+    e1 = R[0]
+    e2 = R[1]
+    e3 = R[2]
+    
+    # d1 = 0.5 * np.sqrt( 1+R[0,0]+R[1,1]+R[2,2] )
+    # d2 = 0.5 * np.sqrt( 1+R[0,0]-R[1,1]-R[2,2] )
+    # d2 = 0.5 * np.sqrt( 1+R[0,0]-R[1,1]-R[2,2] )
+    # d2 = 0.5 * np.sqrt( 1+R[0,0]-R[1,1]-R[2,2] )
+
+    d1 = 1+R[0,0]+R[1,1]+R[2,2]
+    d2 = 1+R[0,0]-R[1,1]-R[2,2]
+    d3 = 1-R[0,0]+R[1,1]-R[2,2]
+    d4 = 1-R[0,0]-R[1,1]+R[2,2]
+    
+    maxD = max((d1,d2,d3,d4))
+    d = 0.5 / np.sqrt(maxD)
+
+    if d1 == maxD:
+        return np.array(( 1.0/(4*d),
+                          d * (R[2,1]-R[1,2]),
+                          d * (R[0,2]-R[2,0]),
+                          d * (R[1,0]-R[0,1]) ))
+    elif d2 == maxD:
+        return np.array(( d * (R[2,1]-R[1,2]),
+                          1.0/(4*d),
+                          d * (R[0,1]+R[1,0]),
+                          d * (R[0,2]+R[2,0]) ))
+    elif d3 == maxD:
+        return np.array(( d * (R[0,2]-R[2,0]),
+                          d * (R[0,1]+R[1,0]),
+                          1.0/(4*d),
+                          d * (R[1,2]+R[2,1]) ))
+    elif d4 == maxD:
+        return np.array(( d * (R[1,0]-R[0,1]),
+                          d * (R[0,2]+R[2,0]),
+                          d * (R[1,2]+R[2,1]),
+                          1.0/(4*d) ))
+
+def rotationAboutAxis(axis,angle, normalizeAxis=True):
+    if normalizeAxis: axis = axis / np.linalg.norm(axis)
+    angle = angle * 0.5 * np.pi/180
+    cos = np.cos( angle )
+    sin = np.sin( angle )
+    q = [cos] + [sin*x for x in axis]
+    return quaternion_to_matrix(q)
+
+def readArbdCoords(fname):
+    coords = []
+    with open(fname) as fh:
+        for line in fh:
+            coords.append([float(x) for x in line.split()[1:]])
+    return np.array(coords)
+
+def readAvgArbdCoords(psf,pdb,dcd,rmsdThreshold=3.5):
+    import MDAnalysis as mda
+
+    usel = mda.Universe(psf, dcd)
+    sel = usel.select_atoms("name D*")
+
+    # r0 = ref.xyz[0,ids,:]
+    ts = usel.trajectory[-1]
+    r0 = sel.positions
+    pos = []
+    for t in range(ts.frame-1,-1,-1):
+        usel.trajectory[t]
+        R,comA,comB = minimizeRmsd(sel.positions,r0)
+        r = np.array( [(r-comA).dot(R)+comB for r in sel.positions] )
+        rmsd = np.mean( (r-r0)**2 )
+        r = np.array( [(r-comA).dot(R)+comB for r in usel.atoms.positions] )
+        pos.append( r )
+        if rmsd > rmsdThreshold**2:
+            break
+    t0=t+1
+    print( "Averaging coordinates in %s after frame %d" % (dcd, t0) )
+
+    pos = np.mean(pos, axis=0)
+    return pos
+
+def unit_quat_conversions():
+    for axis in [[0,0,1],[1,1,1],[1,0,0],[-1,-2,0]]:
+        for angle in np.linspace(-180,180,10):
+            R = rotationAboutAxis(axis, angle)
+            R2 = quaternion_to_matrix( quaternion_from_matrix( R ) )
+            if not np.all( np.abs(R-R2) < 0.01 ):
+                import pdb
+                pdb.set_trace()
+                quaternion_to_matrix( quaternion_from_matrix( R ) )
+
+
+if __name__ == "__main__":
+    unit_quat_conversions()
+            
diff --git a/mrdna/arbdmodel/fjc_polymer_model.py b/mrdna/arbdmodel/fjc_polymer_model.py
new file mode 100644
index 0000000000000000000000000000000000000000..cec6a939b5aa454659ba2611f00e301fdb03a3d9
--- /dev/null
+++ b/mrdna/arbdmodel/fjc_polymer_model.py
@@ -0,0 +1,160 @@
+# -*- coding: utf-8 -*-
+## Test with `python -m arbdmodel.hps_polymer_model`
+
+import numpy as np
+import sys
+
+
+## Local imports
+from . import ArbdModel, ParticleType, PointParticle, Group, get_resource_path    
+from .abstract_polymer import PolymerSection, AbstractPolymerGroup
+from .interactions import NonbondedScheme, HarmonicBond, HarmonicPotential
+from .coords import quaternion_to_matrix
+
+
+"""Define particle types"""
+type_ = ParticleType("X",
+                     damping_coefficient = 40.9,
+                     mass=120
+)
+
+## Bonded potentials
+class FjcNonbonded(NonbondedScheme):
+    def __init__(self, resolution=0.1, rMin=0):
+        NonbondedScheme.__init__(self, typesA=None, typesB=None, resolution=resolution, rMin=rMin)
+
+    def potential(self, r, typeA, typeB):
+        """ Constant force excluded volume """
+        force = 10              # kcal_mol/AA
+        radius = 6
+        
+        u = np.zeros(r.shape)
+        # s = r < 2*radius
+        # u[s] = (2*radius - r[s]) * force            
+        return u
+
+class FjcBeadsFromPolymer(Group):
+
+    def __init__(self, polymer, sequence=None, 
+                 rest_length = 3.8, spring_constant = 25,
+                 **kwargs):
+
+        # if sequence is None:
+        #     raise NotImplementedError
+        #     # ... set random sequence
+
+        self.polymer = polymer
+        self.sequence = sequence
+        self.spring_constant = 25
+        self.rest_length = 3.8
+
+        for prop in ('segname','chain'):
+            if prop not in kwargs:
+                # import pdb
+                # pdb.set_trace()
+                try:
+                    self.__dict__[prop] = polymer.__dict__[prop]
+                except:
+                    pass
+
+        # if len(sequence) != polymer.num_monomers:
+        #     raise ValueError("Length of sequence does not match length of polymer")
+        Group.__init__(self, **kwargs)
+        
+
+    def _clear_beads(self):
+        ...
+        
+    def _generate_beads(self):
+        # beads = self.children
+        nb = self.polymer.num_monomers
+        
+        for i in range(nb):
+            c = self.polymer.monomer_index_to_contour(i)
+            r = self.polymer.contour_to_position(c)
+
+            bead = PointParticle(type_, r,
+                                 resid = i+1)
+            self.add(bead)
+
+        ## Two consecutive nts 
+        for i in range(len(self.children)-1):
+            b1 = self.children[i]
+            b2 = self.children[i+1]
+            """ units "10 kJ/N_A" kcal_mol """
+            bond = HarmonicBond(k = self.spring_constant,
+                                r0 = self.rest_length,
+                                rRange = (0,500),
+                                resolution = 0.01,
+                                maxForce = 50)
+            self.add_bond( i=b1, j=b2, bond = bond, exclude=True )
+
+class FjcModel(ArbdModel):
+    def __init__(self, polymers,
+                 sequences = None,
+                 rest_length = 3.8,
+                 spring_constant = 25,
+                 damping_coefficient = 40.9,
+                 DEBUG=False,
+                 **kwargs):
+
+        """ 
+        [damping_coefficient]: ns
+        """
+
+        print("WARNING: diffusion coefficient arbitrarily set to 100 AA**2/ns in FjcModel")
+        
+        kwargs['timestep'] = 50e-6
+        kwargs['cutoff'] = 10
+
+        if 'decompPeriod' not in kwargs:
+            kwargs['decompPeriod'] = 100000
+
+        """ Assign sequences """
+        if sequences is None:
+            # raise NotImplementedError("HpsModel must be provided a sequences argument")
+            sequences = [None for i in range(len(polymers))]
+
+        self.polymer_group = AbstractPolymerGroup(polymers)
+        self.sequences = sequences
+        self.rest_length = rest_length
+        self.spring_constant = spring_constant
+        ArbdModel.__init__(self, [], **kwargs)
+
+        """ Update type diffusion coefficients """
+        self.set_damping_coefficient( damping_coefficient )
+
+        """ Set up nonbonded interactions """
+        nonbonded = FjcNonbonded()
+        self.useNonbondedScheme( nonbonded, typeA=type_, typeB=type_ )
+                
+        """ Generate beads """
+        self.generate_beads()
+
+    def update_splines(self, coords):
+        i = 0
+        for p,c in zip(self.polymer_group.polymers,self.children):
+            n = len(c.children)
+            p.set_splines(np.linspace(0,1,n), coords[i:i+n])
+            i += n
+
+        self.clear_all()
+        self.generate_beads()
+        ## TODO Apply restraints, etc
+
+    def generate_beads(self):
+        self.peptides = [FjcBeadsFromPolymer(p,s, rest_length = self.rest_length,
+                                             spring_constant = self.spring_constant )
+                         for p,s in zip(self.polymer_group.polymers,self.sequences)]
+
+        for s in self.peptides:
+            self.add(s)
+            s._generate_beads()
+
+    def set_damping_coefficient(self, damping_coefficient):
+        for t in [type_]:
+            t.damping_coefficient = damping_coefficient
+            # t.diffusivity = 831447.2 * temperature / (t.mass * damping_coefficient)
+
+if __name__ == "__main__":
+    pass
diff --git a/mrdna/arbdmodel/hps_polymer_model.py b/mrdna/arbdmodel/hps_polymer_model.py
new file mode 100644
index 0000000000000000000000000000000000000000..f56d43ba7ff9cdb0a480500be686b05eeb906b09
--- /dev/null
+++ b/mrdna/arbdmodel/hps_polymer_model.py
@@ -0,0 +1,313 @@
+# -*- coding: utf-8 -*-
+## Test with `python -m arbdmodel.hps_polymer_model`
+
+import numpy as np
+import sys
+
+
+## Local imports
+from . import ArbdModel, ParticleType, PointParticle, Group, get_resource_path    
+from .abstract_polymer import PolymerSection, AbstractPolymerGroup
+from .interactions import NonbondedScheme, HarmonicBond, HarmonicAngle, HarmonicDihedral
+from .coords import quaternion_to_matrix
+
+"""Define particle types"""
+_types = dict(
+    A = ParticleType("ALA",
+                     mass = 71.08,
+                     charge = 0,
+                     sigma = 5.04,
+                     lambda_ = 0.72973,
+                 ),
+    R = ParticleType("ARG",
+                     mass = 156.2,
+                     charge = 1,
+                     sigma = 6.56,
+                     lambda_ = 0.0,
+                 ),
+    N = ParticleType("ASN",
+                     mass = 114.1,
+                     charge = 0,
+                     sigma = 5.68,
+                     lambda_ = 0.432432,
+                 ),
+    D = ParticleType("ASP",
+                     mass = 115.1,
+                     charge = -1,
+                     sigma = 5.58,
+                     lambda_ = 0.378378,
+                 ),
+    C = ParticleType("CYS",
+                     mass = 103.1,
+                     charge = 0,
+                     sigma = 5.48,
+                     lambda_ = 0.594595,
+                 ),
+    Q = ParticleType("GLN",
+                     mass = 128.1,
+                     charge = 0,
+                     sigma = 6.02,
+                     lambda_ = 0.513514,
+                 ),
+    E = ParticleType("GLU",
+                     mass = 129.1,
+                     charge = -1,
+                     sigma = 5.92,
+                     lambda_ = 0.459459,
+                 ),
+    G = ParticleType("GLY",
+                     mass = 57.05,
+                     charge = 0,
+                     sigma = 4.5,
+                     lambda_ = 0.648649,
+                 ),
+    H = ParticleType("HIS",
+                     mass = 137.1,
+                     charge = 0.5,
+                     sigma = 6.08,
+                     lambda_ = 0.513514,
+                 ),
+    I = ParticleType("ILE",
+                     mass = 113.2,
+                     charge = 0,
+                     sigma = 6.18,
+                     lambda_ = 0.972973,
+                 ),
+    L = ParticleType("LEU",
+                     mass = 113.2,
+                     charge = 0,
+                     sigma = 6.18,
+                     lambda_ = 0.972973,
+                 ),
+    K = ParticleType("LYS",
+                     mass = 128.2,
+                     charge = 1,
+                     sigma = 6.36,
+                     lambda_ = 0.513514,
+                 ),
+    M = ParticleType("MET",
+                     mass = 131.2,
+                     charge = 0,
+                     sigma = 6.18,
+                     lambda_ = 0.837838,
+                 ),
+    F = ParticleType("PHE",
+                     mass = 147.2,
+                     charge = 0,
+                     sigma = 6.36,
+                     lambda_ = 1.0,
+                 ),
+    P = ParticleType("PRO",
+                     mass = 97.12,
+                     charge = 0,
+                     sigma = 5.56,
+                     lambda_ = 1.0,
+                 ),
+    S = ParticleType("SER",
+                     mass = 87.08,
+                     charge = 0,
+                     sigma = 5.18,
+                     lambda_ = 0.594595,
+                 ),
+    T = ParticleType("THR",
+                     mass = 101.1,
+                     charge = 0,
+                     sigma = 5.62,
+                     lambda_ = 0.675676,
+                 ),
+    W = ParticleType("TRP",
+                     mass = 186.2,
+                     charge = 0,
+                     sigma = 6.78,
+                     lambda_ = 0.945946,
+                 ),
+    Y = ParticleType("TYR",
+                     mass = 163.2,
+                     charge = 0,
+                     sigma = 6.46,
+                     lambda_ = 0.864865,
+                 ),
+    V = ParticleType("VAL",
+                     mass = 99.07,
+                     charge = 0,
+                     sigma = 5.86,
+                     lambda_ = 0.891892,
+                 )
+)
+for k,t in _types.items():
+    t.resname = t.name
+
+class HpsNonbonded(NonbondedScheme):
+    def __init__(self, debye_length=10, resolution=0.1, rMin=0):
+        NonbondedScheme.__init__(self, typesA=None, typesB=None, resolution=resolution, rMin=rMin)
+        self.debye_length = debye_length
+        self.maxForce = 50
+
+    def potential(self, r, typeA, typeB):
+        """ Electrostatics """
+        ld = self.debye_length 
+        q1 = typeA.charge
+        q2 = typeB.charge
+        D = 80                  # dielectric of water
+        ## units "e**2 / (4 * pi * epsilon0 AA)" kcal_mol
+        A =  332.06371
+        u_elec = (A*q1*q2/D)*np.exp(-r/ld) / r 
+        
+        """ Hydrophobicity scale model """
+        lambda_ = 0.5 * (typeA.lambda_ + typeB.lambda_)
+        sigma = 0.5 * (typeA.sigma + typeB.sigma)
+        epsilon = 0.2
+        
+        r6 = (sigma/r)**6
+        r12 = r6**2
+        u_lj = 4 * epsilon * (r12-r6)
+        u_hps = lambda_ * np.array(u_lj)
+        s = r<=sigma*2**(1/6)
+        u_hps[s] = u_lj[s] + (1-lambda_) * epsilon
+
+        u = u_elec + u_hps
+        u[0] = u[1]             # Remove NaN
+
+        maxForce = self.maxForce
+        if maxForce is not None:
+            assert(maxForce > 0)
+            f = np.diff(u)/np.diff(r)
+            f[f>maxForce] = maxForce
+            f[f<-maxForce] = -maxForce
+            u[0] = 0
+            u[1:] = np.cumsum(f*np.diff(r))
+        
+        u = u-u[-1]
+            
+        return u
+
+class HpsBeadsFromPolymer(Group):
+    # p = PointParticle(_P, (0,0,0), "P")
+    # b = PointParticle(_B, (3,0,1), "B")
+    # nt = Group( name = "nt", children = [p,b])
+    # nt.add_bond( i=p, j=b, bond = get_resource_path('two_bead_model/BPB.dat') )
+
+    def __init__(self, polymer, sequence=None, **kwargs):
+
+        if sequence is None:
+            raise NotImplementedError
+            # ... set random sequence
+
+        self.polymer = polymer
+        self.sequence = sequence
+
+        for prop in ('segname','chain'):
+            if prop not in kwargs:
+                # import pdb
+                # pdb.set_trace()
+                try:
+                    self.__dict__[prop] = polymer.__dict__[prop]
+                except:
+                    pass
+
+        if len(sequence) != polymer.num_monomers:
+            raise ValueError("Length of sequence does not match length of polymer")
+        Group.__init__(self, **kwargs)
+        
+    def _clear_beads(self):
+        ...
+        
+    def _generate_beads(self):
+        # beads = self.children
+
+        for i in range(self.polymer.num_monomers):
+            c = self.polymer.monomer_index_to_contour(i)
+            r = self.polymer.contour_to_position(c)
+            s = self.sequence[i]
+
+            bead = PointParticle(_types[s], r,
+                                 name = s,
+                                 resid = i+1)
+            self.add(bead)
+            # import pdb
+            # pdb.set_trace()
+            # continue
+
+        ## Two consecutive nts 
+        for i in range(len(self.children)-1):
+            b1 = self.children[i]
+            b2 = self.children[i+1]
+            """ units "10 kJ/N_A" kcal_mol """
+            bond = HarmonicBond(k = 2.3900574,
+                                r0 = 3.8,
+                                rRange = (0,500),
+                                resolution = 0.01,
+                                maxForce = 10)
+            self.add_bond( i=b1, j=b2, bond = bond, exclude=True )
+
+
+class HpsModel(ArbdModel):
+    def __init__(self, polymers,
+                 sequences = None,
+                 debye_length = 10,
+                 damping_coefficient = 10,
+                 DEBUG=False,
+                 **kwargs):
+
+        """ 
+        [debye_length]: angstroms
+        [damping_coefficient]: ns
+        """
+        kwargs['timestep'] = 10e-6
+        kwargs['cutoff'] = max(4*debye_length,20)
+
+        if 'decompPeriod' not in kwargs:
+            kwargs['decompPeriod'] = 1000
+
+        """ Assign sequences """
+        if sequences is None:
+            raise NotImplementedError("HpsModel must be provided a sequences argument")
+
+        self.polymer_group = AbstractPolymerGroup(polymers)
+        self.sequences = sequences
+        ArbdModel.__init__(self, [], **kwargs)
+
+        """ Update type diffusion coefficients """
+        self.types = all_types = [t for key,t in _types.items()]
+        self.set_damping_coefficient( damping_coefficient )
+
+        """ Set up nonbonded interactions """
+        nonbonded = HpsNonbonded(debye_length)
+        for i in range(len(all_types)):
+            t1 = all_types[i]
+            for j in range(i,len(all_types)):
+                t2 = all_types[j]
+                self.useNonbondedScheme( nonbonded, typeA=t1, typeB=t2 )
+                
+        """ Generate beads """
+        self.generate_beads()
+
+    def update_splines(self, coords):
+        i = 0
+        for p in self.polymer_group.polymers:
+            n = p.num_monomers
+            p.set_splines(np.linspace(0,1,n), coords[i:i+n])
+            i += n
+
+        self.clear_all()
+        self.generate_beads()
+        ## TODO Apply restraints, etc
+
+    def generate_beads(self):
+        self.peptides = [HpsBeadsFromPolymer(p,s)
+                         for p,s in zip(self.polymer_group.polymers,self.sequences)]
+
+        for s in self.peptides:
+            self.add(s)
+            s._generate_beads()
+
+    def set_damping_coefficient(self, damping_coefficient):
+        for t in self.types:
+            t.damping_coefficient = damping_coefficient
+            # t.diffusivity = 831447.2 * temperature / (t.mass * damping_coefficient)
+
+if __name__ == "__main__":
+
+    print("TYPES")
+    for n,t in _types.items():
+        print("{}\t{}\t{}\t{}\t{}".format(t.name, t.mass, t.charge, t.sigma, t.lambda_))
diff --git a/mrdna/arbdmodel/interactions.py b/mrdna/arbdmodel/interactions.py
new file mode 100644
index 0000000000000000000000000000000000000000..1c4b9b6c7276d5368a01fa6a24731c9a0abb37a3
--- /dev/null
+++ b/mrdna/arbdmodel/interactions.py
@@ -0,0 +1,154 @@
+from shutil import copyfile
+import os, sys
+import numpy as np
+
+class NonbondedScheme():
+    """ Abstract class for writing nonbonded interactions """
+
+    def __init__(self, typesA=None, typesB=None, resolution=0.1, rMin=0):
+        """If typesA is None, and typesB is None, then """
+        self.resolution = resolution
+        self.rMin = rMin
+
+    def add_sim_system(self, simSystem):
+        self.rMax = simSystem.cutoff
+        self.r = np.arange(rMin,rMax,resolution)
+
+    def potential(self, r, typeA, typeB):
+        raise NotImplementedError
+    
+    def write_file(self, filename, typeA, typeB, rMax):
+        r = np.arange(self.rMin, rMax+self.resolution, self.resolution)
+        u = self.potential(r, typeA, typeB)
+        np.savetxt(filename, np.array([r,u]).T)
+
+
+class LennardJones(NonbondedScheme):
+    def potential(self, r, typeA, typeB):
+        epsilon = np.sqrt( typeA.epsilon**2 + typeB.epsilon**2 )
+        r0 = 0.5 * (typeA.radius + typeB.radius)
+        r6 = (r0/r)**6
+        r12 = r6**2
+        u = epsilon * (r12-2*r6)
+        u[0] = u[1]             # Remove NaN
+        return u
+# LennardJones = LennardJones()
+
+class HalfHarmonic(NonbondedScheme):
+    def potential(self, r, typeA, typeB):
+        k = 10                   # kcal/mol AA**2
+        r0 = (typeA.radius + typeB.radius)
+        u =  0.5 * k * (r-r0)**2
+        u[r > r0] = np.zeros( np.shape(u[r > r0]) )
+        return u
+# HalfHarmonic = HalfHarmonic()
+
+class TabulatedPotential(NonbondedScheme):
+    def __init__(self, tableFile, typesA=None, typesB=None, resolution=0.1, rMin=0):
+        """If typesA is None, and typesB is None, then """
+        self.tableFile = tableFile
+        # self.resolution = resolution
+        # self.rMin = rMin
+
+        ## TODO: check that tableFile exists and is regular file
+        
+    def write_file(self, filename, typeA, typeB, rMax):
+        if filename != self.tableFile:
+            copyfile(self.tableFile, filename)
+
+## Bonded potentials
+class HarmonicPotential():
+    def __init__(self, k, r0, rRange=(0,50), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/"):
+        self.k = k
+        self.r0 = r0
+        self.rRange = rRange
+        self.resolution = 0.1
+        self.maxForce = maxForce
+        self.prefix = prefix
+        self.periodic = False
+        self.type_ = "None"
+        self.max_potential = max_potential
+        self.kscale_ = None     # only used for 
+
+    def filename(self):
+        # raise NotImplementedError("Not implemented")
+        return "%s%s-%.3f-%.3f.dat" % (self.prefix, self.type_,
+                                       self.k*self.kscale_, self.r0)
+
+    def __str__(self):
+        return self.filename()
+
+    def potential(self, dr):
+        return 0.5*self.k*dr**2
+
+    def write_file(self):
+        r = np.arange( self.rRange[0], 
+                       self.rRange[1]+self.resolution, 
+                       self.resolution )
+        dr = r-self.r0
+
+        if self.periodic == True:
+            rSpan = self.rRange[1]-self.rRange[0]
+            assert(rSpan > 0)
+            dr = np.mod( dr+0.5*rSpan, rSpan) - 0.5*rSpan 
+
+        u = self.potential(dr)
+
+        maxForce = self.maxForce
+        if maxForce is not None:
+            assert(maxForce > 0)
+            f = np.diff(u)/np.diff(r)
+            f[f>maxForce] = maxForce
+            f[f<-maxForce] = -maxForce
+            u[0] = 0
+            u[1:] = np.cumsum(f*np.diff(r))
+
+        if self.max_potential is not None:
+            f = np.diff(u)/np.diff(r)
+            ids = np.where( 0.5*(u[1:]+u[:-1]) > self.max_potential )[0]
+
+            w = np.sqrt(2*self.max_potential/self.k)
+            drAvg = 0.5*(np.abs(dr[ids]) + np.abs(dr[ids+1]))
+
+            f[ids] = f[ids] * np.exp(-(drAvg-w)/(w))
+            u[0] = 0
+            u[1:] = np.cumsum(f*np.diff(r))
+
+        u = u - np.min(u)
+
+        np.savetxt( self.filename(), np.array([r, u]).T, fmt="%f" )
+
+    def __hash__(self):
+        assert(self.type_ != "None")
+        return hash((self.type_, self.k, self.r0, self.rRange, self.resolution, self.maxForce, self.max_potential, self.prefix, self.periodic))
+
+    def __eq__(self, other):
+        for a in ("type_", "k", "r0", "rRange", "resolution", "maxForce", "max_potential", "prefix", "periodic"):
+            if self.__dict__[a] != other.__dict__[a]:
+                return False
+        return True
+
+# class NonBonded(HarmonicPotential):
+#     def _init_hook(self):
+#         self.type = "nonbonded"
+#         self.kscale_ = 1.0
+
+class HarmonicBond(HarmonicPotential):
+    def __init__(self, k, r0, rRange=(0,50), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/"):
+        HarmonicPotential.__init__(self, k, r0, rRange, resolution, maxForce, max_potential, prefix)
+        self.type_ = "bond"
+        self.kscale_ = 1.0
+
+class HarmonicAngle(HarmonicPotential):
+    def __init__(self, k, r0, rRange=(0,181), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/"):
+        HarmonicPotential.__init__(self, k, r0, rRange, resolution, maxForce, max_potential, prefix)
+        self.type_ = "angle"
+        self.kscale_ = (180.0/np.pi)**2
+
+class HarmonicDihedral(HarmonicPotential):
+    def __init__(self, k, r0, rRange=(-180,180), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/"):
+        HarmonicPotential.__init__(self, k, r0, rRange, resolution, maxForce, max_potential, prefix)
+        self.periodic = True
+        self.type_ = "dihedral"
+        self.kscale_ = (180.0/np.pi)**2
+
diff --git a/mrdna/arbdmodel/kh_polymer_model.py b/mrdna/arbdmodel/kh_polymer_model.py
new file mode 100644
index 0000000000000000000000000000000000000000..4d732a08e3044c9b73e499f087945c960a4c5ab3
--- /dev/null
+++ b/mrdna/arbdmodel/kh_polymer_model.py
@@ -0,0 +1,313 @@
+# -*- coding: utf-8 -*-
+## Test with `python -m arbdmodel.kh_polymer_model`
+
+import numpy as np
+import sys
+
+## Local imports
+from . import ArbdModel, ParticleType, PointParticle, Group, get_resource_path    
+from .abstract_polymer import PolymerSection, AbstractPolymerGroup
+from .interactions import NonbondedScheme, HarmonicBond, HarmonicAngle, HarmonicDihedral
+from .coords import quaternion_to_matrix
+from .kh_polymer_model_pair_epsilon import epsilon_mj
+
+"""Define particle types"""
+_types = dict(
+    A = ParticleType("ALA",
+                     mass = 71.08,
+                     charge = 0,
+                     sigma = 5.04,
+                 ),
+    R = ParticleType("ARG",
+                     mass = 156.2,
+                     charge = 1,
+                     sigma = 6.56,
+                 ),
+    N = ParticleType("ASN",
+                     mass = 114.1,
+                     charge = 0,
+                     sigma = 5.68,
+                 ),
+    D = ParticleType("ASP",
+                     mass = 115.1,
+                     charge = -1,
+                     sigma = 5.58,
+                 ),
+    C = ParticleType("CYS",
+                     mass = 103.1,
+                     charge = 0,
+                     sigma = 5.48,
+                 ),
+    Q = ParticleType("GLN",
+                     mass = 128.1,
+                     charge = 0,
+                     sigma = 6.02,
+                 ),
+    E = ParticleType("GLU",
+                     mass = 129.1,
+                     charge = -1,
+                     sigma = 5.92,
+                 ),
+    G = ParticleType("GLY",
+                     mass = 57.05,
+                     charge = 0,
+                     sigma = 4.5,
+                 ),
+    H = ParticleType("HIS",
+                     mass = 137.1,
+                     charge = 0.5,
+                     sigma = 6.08,
+                 ),
+    I = ParticleType("ILE",
+                     mass = 113.2,
+                     charge = 0,
+                     sigma = 6.18,
+                 ),
+    L = ParticleType("LEU",
+                     mass = 113.2,
+                     charge = 0,
+                     sigma = 6.18,
+                 ),
+    K = ParticleType("LYS",
+                     mass = 128.2,
+                     charge = 1,
+                     sigma = 6.36,
+                 ),
+    M = ParticleType("MET",
+                     mass = 131.2,
+                     charge = 0,
+                     sigma = 6.18,
+                 ),
+    F = ParticleType("PHE",
+                     mass = 147.2,
+                     charge = 0,
+                     sigma = 6.36,
+                 ),
+    P = ParticleType("PRO",
+                     mass = 97.12,
+                     charge = 0,
+                     sigma = 5.56,
+                 ),
+    S = ParticleType("SER",
+                     mass = 87.08,
+                     charge = 0,
+                     sigma = 5.18,
+                 ),
+    T = ParticleType("THR",
+                     mass = 101.1,
+                     charge = 0,
+                     sigma = 5.62,
+                 ),
+    W = ParticleType("TRP",
+                     mass = 186.2,
+                     charge = 0,
+                     sigma = 6.78,
+                 ),
+    Y = ParticleType("TYR",
+                     mass = 163.2,
+                     charge = 0,
+                     sigma = 6.46,
+                 ),
+    V = ParticleType("VAL",
+                     mass = 99.07,
+                     charge = 0,
+                     sigma = 5.86,
+                 )
+)
+for k,t in _types.items():
+    t.resname = t.name
+
+class KhNonbonded(NonbondedScheme):
+    def __init__(self, debye_length=10, resolution=0.1, rMin=0):
+        NonbondedScheme.__init__(self, typesA=None, typesB=None, resolution=resolution, rMin=rMin)
+        self.debye_length = debye_length
+        self.maxForce = 50
+
+    def potential(self, r, typeA, typeB):
+        """ Electrostatics """
+        ld = self.debye_length 
+        q1 = typeA.charge
+        q2 = typeB.charge
+        D = 80                  # dielectric of water
+        ## units "e**2 / (4 * pi * epsilon0 AA)" kcal_mol
+        A =  332.06371
+        u_elec = (A*q1*q2/D)*np.exp(-r/ld) / r 
+        
+        """ KH scale model """
+        # alpha = 0.228
+        # epsilon0 = -1.0
+        # e_mj = epsilon_mj[(typeA.name,typeB.name)]        
+        # epsilon = alpha * np.abs( e_mj - epsilon0 )
+        epsilon = epsilon_mj[(typeA.name,typeB.name)] 
+        lambda_ = -1 if epsilon > 0 else 1
+        epsilon = np.abs(epsilon)
+
+        sigma = 0.5 * (typeA.sigma + typeB.sigma)
+        
+        r6 = (sigma/r)**6
+        r12 = r6**2
+        u_lj = 4 * epsilon * (r12-r6)
+        u_hps = lambda_ * np.array(u_lj)
+        s = r<=sigma*2**(1/6)
+        u_hps[s] = u_lj[s] + (1-lambda_) * epsilon
+
+        u = u_elec + u_hps
+        u[0] = u[1]             # Remove NaN
+
+        maxForce = self.maxForce
+        if maxForce is not None:
+            assert(maxForce > 0)
+            f = np.diff(u)/np.diff(r)
+            f[f>maxForce] = maxForce
+            f[f<-maxForce] = -maxForce
+            u[0] = 0
+            u[1:] = np.cumsum(f*np.diff(r))
+        
+        u = u-u[-1]
+            
+        return u
+
+class KhBeadsFromPolymer(Group):
+    # p = PointParticle(_P, (0,0,0), "P")
+    # b = PointParticle(_B, (3,0,1), "B")
+    # nt = Group( name = "nt", children = [p,b])
+    # nt.add_bond( i=p, j=b, bond = get_resource_path('two_bead_model/BPB.dat') )
+
+    def __init__(self, polymer, sequence=None, **kwargs):
+
+        if sequence is None:
+            raise NotImplementedError
+            # ... set random sequence
+
+        self.polymer = polymer
+        self.sequence = sequence
+
+        for prop in ('segname','chain'):
+            if prop not in kwargs:
+                # import pdb
+                # pdb.set_trace()
+                try:
+                    self.__dict__[prop] = polymer.__dict__[prop]
+                except:
+                    pass
+
+        if len(sequence) != polymer.num_monomers:
+            raise ValueError("Length of sequence does not match length of polymer")
+        Group.__init__(self, **kwargs)
+        
+    def _clear_beads(self):
+        ...
+        
+    def _generate_beads(self):
+        # beads = self.children
+
+        for i in range(self.polymer.num_monomers):
+            c = self.polymer.monomer_index_to_contour(i)
+            r = self.polymer.contour_to_position(c)
+            s = self.sequence[i]
+
+            bead = PointParticle(_types[s], r,
+                                 name = s,
+                                 resid = i+1)
+            self.add(bead)
+            # import pdb
+            # pdb.set_trace()
+            # continue
+
+        ## Two consecutive nts 
+        for i in range(len(self.children)-1):
+            b1 = self.children[i]
+            b2 = self.children[i+1]
+            """ units "10 kJ/N_A" kcal_mol """
+            bond = HarmonicBond(k = 2.3900574,
+                                r0 = 3.8,
+                                rRange = (0,500),
+                                resolution = 0.01,
+                                maxForce = 10)
+            self.add_bond( i=b1, j=b2, bond = bond, exclude=True )
+
+
+class KhModel(ArbdModel):
+    def __init__(self, polymers,
+                 sequences = None,
+                 debye_length = 10,
+                 damping_coefficient = 10,
+                 DEBUG=False,
+                 **kwargs):
+
+        """ 
+        [debye_length]: angstroms
+        [damping_coefficient]: ns
+        """
+        kwargs['timestep'] = 10e-6
+        kwargs['cutoff'] = max(4*debye_length,20)
+
+        if 'decompPeriod' not in kwargs:
+            kwargs['decompPeriod'] = 1000
+
+        """ Assign sequences """
+        if sequences is None:
+            raise NotImplementedError("KhModel must be provided a sequences argument")
+
+        self.polymer_group = AbstractPolymerGroup(polymers)
+        self.sequences = sequences
+        ArbdModel.__init__(self, [], **kwargs)
+
+        """ Update type diffusion coefficients """
+        self.types = all_types = [t for key,t in _types.items()]
+        self.set_damping_coefficient( damping_coefficient )
+
+        """ Set up nonbonded interactions """
+        nonbonded = KhNonbonded(debye_length)
+        for i in range(len(all_types)):
+            t1 = all_types[i]
+            for j in range(i,len(all_types)):
+                t2 = all_types[j]
+                self.useNonbondedScheme( nonbonded, typeA=t1, typeB=t2 )
+                
+        """ Generate beads """
+        self.generate_beads()
+
+    def update_splines(self, coords):
+        i = 0
+        for p in self.polymer_group.polymers:
+            n = p.num_monomers
+            p.set_splines(np.linspace(0,1,n), coords[i:i+n])
+            i += n
+
+        self.clear_all()
+        self.generate_beads()
+        ## TODO Apply restraints, etc
+
+    def generate_beads(self):
+        self.peptides = [KhBeadsFromPolymer(p,s)
+                         for p,s in zip(self.polymer_group.polymers,self.sequences)]
+
+        for s in self.peptides:
+            self.add(s)
+            s._generate_beads()
+
+    def set_damping_coefficient(self, damping_coefficient):
+        for t in self.types:
+            t.damping_coefficient = damping_coefficient
+            # t.diffusivity = 831447.2 * temperature / (t.mass * damping_coefficient)
+
+if __name__ == "__main__":
+
+    from matplotlib import pyplot as plt
+    nt = len(_types)
+    # print("TYPES")
+    # for n,t in _types.items():
+    #     print("{}\t{}\t{}\t{}\t{}".format(t.name, t.mass, t.charge, t.sigma, t.lambda_))
+    type_string = 'WYFMLIVAPGCQNTSEDKHR'
+    d = np.zeros([nt,nt])
+    for i in range(nt):
+        n1 = type_string[i]
+        t1 = _types[n1]
+        for j in range(nt):
+            n2 = type_string[j]
+            t2 = _types[n2]
+            d[nt-i-1,j] = epsilon_mj[(t1.name,t2.name)]
+
+    plt.imshow(d.T)
+    plt.show()
diff --git a/mrdna/arbdmodel/kh_polymer_model_pair_epsilon.py b/mrdna/arbdmodel/kh_polymer_model_pair_epsilon.py
new file mode 100644
index 0000000000000000000000000000000000000000..e696b2c2d2ba7bd4b9f500cfd039add279d8ea0f
--- /dev/null
+++ b/mrdna/arbdmodel/kh_polymer_model_pair_epsilon.py
@@ -0,0 +1,229 @@
+
+_txtdata = """CYS CYS -0.509719
+CYS MET -0.448877
+MET MET -0.512423
+CYS PHE -0.558393
+MET PHE -0.661148
+PHE PHE -0.755790
+CYS ILE -0.517831
+MET ILE -0.588137
+PHE ILE -0.699005
+ILE ILE -0.658443
+CYS LEU -0.562449
+MET LEU -0.640867
+PHE LEU -0.758494
+ILE LEU -0.726045
+LEU LEU -0.770663
+CYS VAL -0.444821
+MET VAL -0.493495
+PHE VAL -0.624642
+ILE VAL -0.592194
+LEU VAL -0.650331
+VAL VAL -0.520535
+CYS TRP -0.443469
+MET TRP -0.524592
+PHE TRP -0.607066
+ILE TRP -0.555688
+LEU TRP -0.604362
+VAL TRP -0.474566
+TRP TRP -0.458342
+CYS TYR -0.336658
+MET TYR -0.438061
+PHE TYR -0.539464
+ILE TYR -0.484030
+LEU TYR -0.540816
+VAL TYR -0.398852
+TRP TYR -0.404260
+TYR TYR -0.338010
+CYS ALA -0.256888
+MET ALA -0.306913
+PHE ALA -0.424541
+ILE ALA -0.393444
+LEU ALA -0.438061
+VAL ALA -0.320433
+TRP ALA -0.290689
+TYR ALA -0.228495
+ALA ALA -0.141964
+CYS GLY -0.201454
+MET GLY -0.232551
+PHE GLY -0.332602
+ILE GLY -0.285280
+LEU GLY -0.336658
+VAL GLY -0.231199
+TRP GLY -0.236607
+TYR GLY -0.181173
+ALA GLY -0.086531
+GLY GLY -0.077066
+CYS THR -0.194694
+MET THR -0.248775
+PHE THR -0.352882
+ILE THR -0.319081
+LEU THR -0.360995
+VAL THR -0.242015
+TRP THR -0.209566
+TYR THR -0.181173
+ALA THR -0.087883
+GLY THR -0.055434
+THR THR -0.060842
+CYS SER -0.160893
+MET SER -0.183877
+PHE SER -0.317729
+ILE SER -0.250127
+LEU SER -0.304209
+VAL SER -0.186582
+TRP SER -0.178469
+TYR SER -0.150076
+ALA SER -0.045969
+GLY SER -0.020281
+THR SER -0.039209
+SER SER  0.000000
+CYS ASN -0.124388
+MET ASN -0.173061
+PHE ASN -0.281224
+ILE ASN -0.212270
+LEU ASN -0.279872
+VAL ASN -0.156837
+TRP ASN -0.189286
+TYR ASN -0.147372
+ALA ASN -0.022985
+GLY ASN -0.009464
+THR ASN -0.028393
+SER ASN  0.012168
+ASN ASN -0.001352
+CYS GLN -0.159541
+MET GLN -0.220383
+PHE GLN -0.328546
+ILE GLN -0.270408
+LEU GLN -0.320433
+VAL GLN -0.189286
+TRP GLN -0.194694
+TYR GLN -0.175765
+ALA GLN -0.029745
+GLY GLN  0.001352
+THR GLN -0.031097
+SER GLN  0.024337
+ASN GLN -0.005408
+GLN GLN  0.017577
+CYS ASP -0.100051
+MET ASP -0.121684
+PHE ASP -0.244719
+ILE ASP -0.202806
+LEU ASP -0.233903
+VAL ASP -0.109515
+TRP ASP -0.158189
+TYR ASP -0.147372
+ALA ASP -0.004056
+GLY ASP  0.010816
+THR ASP -0.017577
+SER ASP  0.005408
+ASN ASP -0.001352
+GLN ASP  0.028393
+ASP ASP  0.062194
+CYS GLU -0.081122
+MET GLU -0.164949
+PHE GLU -0.255536
+ILE GLU -0.216326
+LEU GLU -0.259592
+VAL GLU -0.135204
+TRP GLU -0.178469
+TYR GLU -0.151428
+ALA GLU  0.021633
+GLY GLU  0.060842
+THR GLU -0.009464
+SER GLU  0.025689
+ASN GLU  0.021633
+GLN GLU  0.033801
+ASP GLU  0.087883
+GLU GLU  0.102755
+CYS HIS -0.260944
+MET HIS -0.312321
+PHE HIS -0.419132
+ILE HIS -0.333954
+LEU HIS -0.388035
+VAL HIS -0.258240
+TRP HIS -0.312321
+TYR HIS -0.250127
+ALA HIS -0.100051
+GLY HIS -0.064898
+THR HIS -0.101403
+SER HIS -0.059490
+ASN HIS -0.055434
+GLN HIS -0.041913
+ASP HIS -0.087883
+GLU HIS -0.064898
+HIS HIS -0.186582
+CYS ARG -0.121684
+MET ARG -0.196046
+PHE ARG -0.312321
+ILE ARG -0.265000
+LEU ARG -0.319081
+VAL ARG -0.189286
+TRP ARG -0.235255
+TYR ARG -0.201454
+ALA ARG -0.021633
+GLY ARG -0.006760
+THR ARG -0.031097
+SER ARG  0.006760
+ASN ARG  0.004056
+GLN ARG -0.017577
+ASP ARG -0.083826
+GLU ARG -0.081122
+HIS ARG -0.066250
+ARG ARG  0.016224
+CYS LYS -0.037857
+MET LYS -0.109515
+PHE LYS -0.228495
+ILE LYS -0.181173
+LEU LYS -0.229847
+VAL LYS -0.110867
+TRP LYS -0.137908
+TYR LYS -0.125740
+ALA LYS  0.048673
+GLY LYS  0.070306
+THR LYS  0.048673
+SER LYS  0.083826
+ASN LYS  0.062194
+GLN LYS  0.051378
+ASP LYS -0.001352
+GLU LYS -0.017577
+HIS LYS  0.043265
+ARG LYS  0.146020
+LYS LYS  0.209566
+CYS PRO -0.189286
+MET PRO -0.240663
+PHE PRO -0.348826
+ILE PRO -0.282576
+LEU PRO -0.342066
+VAL PRO -0.223087
+TRP PRO -0.278520
+TYR PRO -0.205510
+ALA PRO -0.048673
+GLY PRO -0.027041
+THR PRO -0.031097
+SER PRO  0.013520
+ASN PRO  0.018929
+GLN PRO -0.008112
+ASP PRO  0.045969
+GLU PRO  0.055434
+HIS PRO -0.078418
+ARG PRO -0.004056
+LYS PRO  0.094643
+PRO PRO -0.010816"""
+
+epsilon_mj = dict()
+
+def __add_value(key,v):
+    if key not in epsilon_mj:
+        epsilon_mj[key] = v
+    else:
+        assert(epsilon_mj[key] == v)
+
+for line in _txtdata.split('\n'):
+    n1,n2,v = line.split()
+    v = float(v)
+    
+    __add_value((n1,n2), v)
+    __add_value((n2,n1), v)
+    
+if __name__ == '__main__':
+    print(epsilon_mj)
diff --git a/mrdna/arbdmodel/nonbonded.py b/mrdna/arbdmodel/nonbonded.py
new file mode 100644
index 0000000000000000000000000000000000000000..35ed22113877774093d143dc748c6a7dc20995b9
--- /dev/null
+++ b/mrdna/arbdmodel/nonbonded.py
@@ -0,0 +1,241 @@
+from shutil import copyfile
+import os, sys
+import numpy as np
+
+class NonbondedScheme():
+    """ Abstract class for writing nonbonded interactions """
+
+    def __init__(self, typesA=None, typesB=None, resolution=0.1, rMin=0):
+        """If typesA is None, and typesB is None, then """
+        self.resolution = resolution
+        self.rMin = rMin
+
+    def add_sim_system(self, simSystem):
+        self.rMax = simSystem.cutoff
+        self.r = np.arange(rMin,rMax,resolution)
+
+    def potential(self, r, typeA, typeB):
+        raise NotImplementedError
+    
+    def write_file(self, filename, typeA, typeB, rMax):
+        r = np.arange(self.rMin, rMax+self.resolution, self.resolution)
+        u = self.potential(r, typeA, typeB)
+        np.savetxt(filename, np.array([r,u]).T)
+
+
+class LennardJones(NonbondedScheme):
+    def potential(self, r, typeA, typeB):
+        epsilon = sqrt( typeA.epsilon**2 + typeB.epsilon**2 )
+        r0 = 0.5 * (typeA.radius + typeB.radius)
+        r6 = (r0/r)**6
+        r12 = r6**2
+        u = epsilon * (r12-2*r6)
+        u[0] = u[1]             # Remove NaN
+        return u
+LennardJones = LennardJones()
+
+class HalfHarmonic(NonbondedScheme):
+    def potential(self, r, typeA, typeB):
+        k = 10                   # kcal/mol AA**2
+        r0 = (typeA.radius + typeB.radius)
+        u =  0.5 * k * (r-r0)**2
+        u[r > r0] = np.zeros( np.shape(u[r > r0]) )
+        return u
+HalfHarmonic = HalfHarmonic()
+
+class TabulatedPotential(NonbondedScheme):
+    def __init__(self, tableFile, typesA=None, typesB=None, resolution=0.1, rMin=0):
+        """If typesA is None, and typesB is None, then """
+        self.tableFile = tableFile
+        # self.resolution = resolution
+        # self.rMin = rMin
+
+        ## TODO: check that tableFile exists and is regular file
+        
+    def write_file(self, filename, typeA, typeB, rMax):
+        if filename != self.tableFile:
+            copyfile(self.tableFile, filename)
+
+## Bonded potentials
+class BasePotential():
+    def __init__(self, r0, rRange=(0,50), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/"):
+        self.r0 = r0
+        self.rRange = rRange
+        self.resolution = resolution
+        self.maxForce = maxForce
+        self.prefix = prefix
+        self.periodic = False
+        self.type_ = "None"
+        self.max_potential = max_potential
+        self.kscale_ = None     # only used for 
+
+    def filename(self):
+        raise NotImplementedError("Not implemented")
+
+    def potential(self,dr):
+        raise NotImplementedError("Not implemented")
+
+    def __str__(self):
+        return self.filename()
+
+    def write_file(self):
+        r = np.arange( self.rRange[0], 
+                       self.rRange[1]+self.resolution, 
+                       self.resolution )
+        dr = r-self.r0
+
+        if self.periodic == True:
+            rSpan = self.rRange[1]-self.rRange[0]
+            assert(rSpan > 0)
+            dr = np.mod( dr+0.5*rSpan, rSpan) - 0.5*rSpan 
+
+        u = self.potential(dr)
+
+        maxForce = self.maxForce
+        if maxForce is not None:
+            assert(maxForce > 0)
+            f = np.diff(u)/np.diff(r)
+            f[f>maxForce] = maxForce
+            f[f<-maxForce] = -maxForce
+            u[0] = 0
+            u[1:] = np.cumsum(f*np.diff(r))
+
+        if self.max_potential is not None:
+            f = np.diff(u)/np.diff(r)
+            ids = np.where( 0.5*(u[1:]+u[:-1]) > self.max_potential )[0]
+
+            w = np.sqrt(2*self.max_potential/self.k)
+            drAvg = 0.5*(np.abs(dr[ids]) + np.abs(dr[ids+1]))
+
+            f[ids] = f[ids] * np.exp(-(drAvg-w)/(w))
+            u[0] = 0
+            u[1:] = np.cumsum(f*np.diff(r))
+
+        u = u - np.min(u)
+
+        np.savetxt( self.filename(), np.array([r, u]).T, fmt="%f" )
+
+class HarmonicPotential(BasePotential):
+    def __init__(self, k, r0, rRange, resolution, maxForce, max_potential, prefix, correct_geometry=False):
+        self.k = k
+        self.kscale_ = None
+        BasePotential.__init__(self, r0, rRange, resolution, maxForce, max_potential, prefix)
+
+    def filename(self):
+        return "%s%s-%.3f-%.3f.dat" % (self.prefix, self.type_,
+                                       self.k*self.kscale_, self.r0)
+    def potential(self,dr):
+        return 0.5*self.k*dr**2
+
+    def __hash__(self):
+        assert(self.type_ != "None")
+        return hash((self.type_, self.k, self.r0, self.rRange, self.resolution, self.maxForce, self.max_potential, self.prefix, self.periodic))
+
+    def __eq__(self, other):
+        for a in ("type_", "k", "r0", "rRange", "resolution", "maxForce", "max_potential", "prefix", "periodic"):
+            if self.__dict__[a] != other.__dict__[a]:
+                return False
+        return True
+
+# class NonBonded(HarmonicPotential):
+#     def _init_hook(self):
+#         self.type = "nonbonded"
+#         self.kscale_ = 1.0
+
+class HarmonicBond(HarmonicPotential):
+    def __init__(self, k, r0, rRange=(0,50), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/", correct_geometry=False, temperature=295):
+        HarmonicPotential.__init__(self, k, r0, rRange, resolution, maxForce, max_potential, prefix)
+        self.type_ = "gbond" if correct_geometry else "bond"
+        self.kscale_ = 1.0
+        self.correct_geometry = correct_geometry
+        self.temperature = temperature
+
+    def potential(self,dr):
+        u = HarmonicPotential.potential(self,dr)
+        if self.correct_geometry:
+            with np.errstate(divide='ignore',invalid='ignore'):
+                du = 2*0.58622592*np.log(dr+self.r0) * self.temperature/295
+            du[np.logical_not(np.isfinite(du))] = 0
+            u = u-du
+        return u
+
+
+class HarmonicAngle(HarmonicPotential):
+    def __init__(self, k, r0, rRange=(0,181), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/"):
+        HarmonicPotential.__init__(self, k, r0, rRange, resolution, maxForce, max_potential, prefix)
+        self.type_ = "angle"
+        self.kscale_ = (180.0/np.pi)**2
+
+class HarmonicDihedral(HarmonicPotential):
+    def __init__(self, k, r0, rRange=(-180,180), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/"):
+        HarmonicPotential.__init__(self, k, r0, rRange, resolution, maxForce, max_potential, prefix)
+        self.periodic = True
+        self.type_ = "dihedral"
+        self.kscale_ = (180.0/np.pi)**2
+
+class WLCSKBond(BasePotential):
+    """ ## https://aip.scitation.org/doi/full/10.1063/1.4968020 """
+    def __init__(self, d, lp, kT, rRange=(0,50), resolution=0.02, maxForce=100, max_potential=None, prefix="potentials/"):
+        BasePotential.__init__(self, 0, rRange, resolution, maxForce, max_potential, prefix)
+        self.type_ = "wlcbond"
+        self.d = d          # separation
+        self.lp = lp            # persistence length
+        self.kT = kT
+
+    def filename(self):
+        return "%s%s-%.3f-%.3f.dat" % (self.prefix, self.type_,
+                                       self.d, self.lp)
+    def potential(self, dr):
+        nk = self.d / (2*self.lp)
+        q2 = (dr / self.d)**2
+        a1,a2 = 1, -7.0/(2*nk)
+        a3 = 3.0/32 - 3.0/(8*nk) - 6.0/(4*nk**2)
+        p0,p1,p2,p3,p4 = 13.0/32, 3.4719,2.5064,-1.2906,0.6482
+        a4 = (p0 + p1/(2*nk) + p2*(2*nk)**-2) / (1+p3/(2*nk)+p4*(2*nk)**-2)
+        with np.errstate(divide='ignore',invalid='ignore'):
+            u = self.kT * nk * ( a1/(1-q2) - a2*np.log(1-q2) + a3*q2 - 0.5*a4*q2*(q2-2) )
+        max_force = np.diff(u[q2<1][-2:]) / np.diff(dr).mean()
+        max_u = u[q2<1][-1]
+        max_dr = dr[q2<1][-2]
+        assert( max_force >= 0 )
+        u[q2>=1] = (dr[q2>=1]-max_dr)*max_force + max_u
+        return u
+
+    def __hash__(self):
+        assert(self.type_ != "None")
+        return hash((self.type_, self.d, self.lp, self.kT, self.rRange, self.resolution, self.maxForce, self.max_potential, self.prefix, self.periodic))
+
+    def __eq__(self, other):
+        for a in ("type_", "d", "lp", "kT" "rRange", "resolution", "maxForce", "max_potential", "prefix", "periodic"):
+            if self.__dict__[a] != other.__dict__[a]:
+                return False
+        return True
+
+class WLCSKAngle(BasePotential):
+    ## https://aip.scitation.org/doi/full/10.1063/1.4968020
+    def __init__(self, d, lp, kT, rRange=(0,181), resolution=0.5, maxForce=None, max_potential=None, prefix="potentials/"):
+        BasePotential.__init__(self, 180, rRange, resolution, maxForce, max_potential, prefix)
+        self.type_ = "wlcangle"
+        self.d = d          # separation
+        self.lp = lp            # persistence length
+        self.kT = kT
+
+    def filename(self):
+        return "%s%s-%.3f-%.3f.dat" % (self.prefix, self.type_,
+                                       self.d, self.lp)
+    def potential(self,dr):
+        nk = self.d / (2*self.lp)
+        p1,p2,p3,p4 = -1.237, 0.8105, -1.0243, 0.4595
+        C = (1 + p1*(2*nk) + p2*(2*nk)**2) / (2*nk+p3*(2*nk)**2+p4*(2*nk)**3)
+        u = self.kT * C * (1-np.cos(dr * np.pi / 180))
+        return u
+
+    def __hash__(self):
+        assert(self.type_ != "None")
+        return hash((self.type_, self.d, self.lp, self.kT, self.rRange, self.resolution, self.maxForce, self.max_potential, self.prefix, self.periodic))
+
+    def __eq__(self, other):
+        for a in ("type_", "d", "lp", "kT" "rRange", "resolution", "maxForce", "max_potential", "prefix", "periodic"):
+            if self.__dict__[a] != other.__dict__[a]:
+                return False
+        return True
diff --git a/mrdna/arbdmodel/onck_polymer_model.py b/mrdna/arbdmodel/onck_polymer_model.py
new file mode 100644
index 0000000000000000000000000000000000000000..861f90d64dee96f83483264026d38b2b55c1000d
--- /dev/null
+++ b/mrdna/arbdmodel/onck_polymer_model.py
@@ -0,0 +1,327 @@
+# -*- coding: utf-8 -*-
+## Test with `python -m arbdmodel.onck_polymer_model`
+
+import numpy as np
+import sys
+
+
+## Local imports
+from . import ArbdModel, ParticleType, PointParticle, Group, get_resource_path    
+from .abstract_polymer import PolymerSection, AbstractPolymerGroup
+from .interactions import NonbondedScheme, HarmonicBond, HarmonicAngle, HarmonicDihedral
+from .coords import quaternion_to_matrix
+
+"""Define particle types"""
+_types = dict(
+    A = ParticleType("ALA",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.7,
+                     lambda_ = 0.72973,
+                 ),
+    R = ParticleType("ARG",
+                     mass = 120,
+                     charge = 1,
+                     epsilon = 0.0,
+                     lambda_ = 0.0,
+                 ),
+    N = ParticleType("ASN",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.33,
+                     lambda_ = 0.432432,
+                 ),
+    D = ParticleType("ASP",
+                     mass = 120,
+                     charge = -1,
+                     epsilon = 0.0005,
+                 ),
+    C = ParticleType("CYS",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.68,
+                 ),
+    Q = ParticleType("GLN",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.64,
+                 ),
+    E = ParticleType("GLU",
+                     mass = 120,
+                     charge = -1,
+                     epsilon = 0.0005,
+                 ),
+    G = ParticleType("GLY",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.41,
+                 ),
+    H = ParticleType("HIS",
+                     mass = 120,
+                     charge = 0.0,
+                     epsilon = 0.53,
+                 ),
+    I = ParticleType("ILE",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.98,
+                 ),
+    L = ParticleType("LEU",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 1.0,
+                 ),
+    K = ParticleType("LYS",
+                     mass = 120,
+                     charge = 1,
+                     epsilon = 0.0005,
+                 ),
+    M = ParticleType("MET",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.78,
+                 ),
+    F = ParticleType("PHE",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 1.0,
+                 ),
+    P = ParticleType("PRO",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.65,
+                 ),
+    S = ParticleType("SER",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.45,
+                 ),
+    T = ParticleType("THR",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.51,
+                 ),
+    W = ParticleType("TRP",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.96,
+                 ),
+    Y = ParticleType("TYR",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.82,
+                 ),
+    V = ParticleType("VAL",
+                     mass = 120,
+                     charge = 0,
+                     epsilon = 0.94,
+                 )
+)
+for k,t in _types.items():
+    t.resname = t.name
+
+class OnckNonbonded(NonbondedScheme):
+    def __init__(self, debye_length=10, resolution=0.1, rMin=0):
+        NonbondedScheme.__init__(self, typesA=None, typesB=None,
+                                 resolution=resolution, rMin=rMin)
+        self.debye_length = debye_length
+        self.maxForce = 50
+        # self.maxForce = 100
+        # self.maxForce = None
+
+    def potential(self, r, typeA, typeB):
+        """ Electrostatics """
+        ld = self.debye_length
+        q1 = typeA.charge
+        q2 = typeB.charge
+        D = 80                  # dielectric of water
+        _z = 2.5
+        D = 80 * (1- (r/_z)**2 * np.exp(r/_z)/(np.exp(r/_z)-1)**2)
+        ## units "e**2 / (4 * pi * epsilon0 AA)" kcal_mol
+        A =  332.06371
+        u_elec = (A*q1*q2/D)*np.exp(-r/ld) / r
+
+        """ LJ-type term """
+        alpha = 0.27
+        epsilon_hp = 3.1070746 # units "13 kJ/N_A" kcal_mol
+        epsilon_rep = 2.3900574 # units "10 kJ/N_A" kcal_mol
+
+        sigma = 6.0
+        epsilon = epsilon_hp*np.sqrt( (typeA.epsilon*typeB.epsilon)**alpha )
+
+        r6 = (sigma/r)**6
+        r8 = (sigma/r)**8
+        u_lj = (epsilon_rep-epsilon) * r8
+        s = r<=sigma
+        u_lj[s] = epsilon_rep*r8[s] - epsilon*(4*r6[s]-1)/3
+        u_lj[r>25] = 0
+
+
+        u = u_elec + u_lj
+        u[0] = u[1]             # Remove NaN
+
+        maxForce = self.maxForce
+        if maxForce is not None:
+            assert(maxForce > 0)
+            f = np.diff(u)/np.diff(r)
+            f[f>maxForce] = maxForce
+            f[f<-maxForce] = -maxForce
+            u[0] = 0
+            u[1:] = np.cumsum(f*np.diff(r))
+
+        u = u-u[-1]
+
+        return u
+
+class OnckBeadsFromPolymer(Group):
+    """ units "8038 kJ / (N_A nm**2)" "0.5 * kcal_mol/AA**2" """
+    peptide_bond = HarmonicBond(k = 38.422562,
+                        r0 = 3.8,
+                        rRange = (0,500),
+                        resolution = 0.01,
+                        maxForce = 10)
+
+    def __init__(self, polymer, sequence=None, **kwargs):
+
+        if sequence is None:
+            raise NotImplementedError
+            # ... set random sequence
+
+        self.polymer = polymer
+        self.sequence = sequence
+
+        for prop in ('segname','chain'):
+            if prop not in kwargs:
+                # import pdb
+                # pdb.set_trace()
+                try:
+                    self.__dict__[prop] = polymer.__dict__[prop]
+                except:
+                    pass
+
+        if len(sequence) != polymer.num_monomers:
+            raise ValueError("Length of sequence does not match length of polymer")
+        Group.__init__(self, **kwargs)
+        
+    def _clear_beads(self):
+        ...
+        
+    def _generate_beads(self):
+        for i in range(self.polymer.num_monomers):
+            c = self.polymer.monomer_index_to_contour(i)
+            r = self.polymer.contour_to_position(c)
+            s = self.sequence[i]
+
+            bead = PointParticle(_types[s], r,
+                                 name = s,
+                                 resid = i+1)
+            self.add(bead)
+
+        ## Two consecutive monomers 
+        for i in range(len(self.children)-1):
+            b1,b2 = [self.children[i+j] for j in range(2)]
+            bond = OnckBeadsFromPolymer.peptide_bond
+            self.add_bond( i=b1, j=b2, bond = bond, exclude=True )
+
+        def bead_to_type(bead):
+            if bead.type_.name == 'PRO':
+                return 'P'
+            elif bead.type_.name == 'GLY':
+                return 'G'
+            else:
+                return 'X'
+
+        ## Three consecutive monomers 
+        for i in range(len(self.children)-2):
+            b1,b2,b3 = [self.children[i+j] for j in range(3)]
+            t1,t2,t3 = ([bead_to_type(b) for b in (b1,b2,b3)])
+
+            filename = 'onck_model_potentials/bend_O{}{}.txt'.format(
+                t2,'P' if t3 == 'P' else 'Y' )
+            self.add_angle( i=b1, j=b2, k=b3, 
+                          angle = get_resource_path(filename) )
+            self.add_exclusion( i=b1, j=b3 )
+
+        ## Four consecutive monomers 
+        for i in range(len(self.children)-3):
+            b1,b2,b3,b4 = [self.children[i+j] for j in range(4)]
+            t1,t2,t3,t4 = ([bead_to_type(b) for b in (b1,b2,b3,b4)])
+
+            filename = 'onck_model_potentials/dih_{}{}.txt'.format(t2,t3)
+            self.add_dihedral( i=b1, j=b2, k=b3, l=b4,
+                               dihedral = get_resource_path(filename) )
+            self.add_exclusion( i=b1, j=b4 )
+
+class OnckModel(ArbdModel):
+    def __init__(self, polymers,
+                 sequences = None,
+                 debye_length = 10,
+                 damping_coefficient = 50e3,
+                 DEBUG=False,
+                 **kwargs):
+
+        """ 
+        [debye_length]: angstroms
+        [damping_coefficient]: ns
+        """
+        if debye_length != 10:
+            print("""WARNING: you are deviated from the model published by Onck by choosing a debye length != 1 nm.
+    Be advised that the non-bonded cutoff is simply set to 5 * debye_length, but this is not necessarily prescribed by the model.""")
+        kwargs['timestep'] = 20e-6
+        kwargs['cutoff'] = max(5*debye_length,25)
+
+        if 'decompPeriod' not in kwargs:
+            kwargs['decompPeriod'] = 1000
+
+        """ Assign sequences """
+        if sequences is None:
+            raise NotImplementedError("OnckModel must be provided a sequences argument")
+
+        self.polymer_group = AbstractPolymerGroup(polymers)
+        self.sequences = sequences
+        ArbdModel.__init__(self, [], **kwargs)
+
+        """ Update type diffusion coefficients """
+        self.types = all_types = [t for key,t in _types.items()]
+        self.set_damping_coefficient( damping_coefficient )
+
+        """ Set up nonbonded interactions """
+        nonbonded = OnckNonbonded(debye_length)
+        for i in range(len(all_types)):
+            t1 = all_types[i]
+            for j in range(i,len(all_types)):
+                t2 = all_types[j]
+                self.useNonbondedScheme( nonbonded, typeA=t1, typeB=t2 )
+                
+        """ Generate beads """
+        self.generate_beads()
+
+    def update_splines(self, coords):
+        i = 0
+        for p in self.polymer_group.polymers:
+            n = p.num_monomers
+            p.set_splines(np.linspace(0,1,n), coords[i:i+n])
+            i += n
+
+        self.clear_all()
+        self.generate_beads()
+        ## TODO Apply restraints, etc
+
+    def generate_beads(self):
+        self.peptides = [OnckBeadsFromPolymer(p,s)
+                         for p,s in zip(self.polymer_group.polymers,self.sequences)]
+
+        for s in self.peptides:
+            self.add(s)
+            s._generate_beads()
+
+    def set_damping_coefficient(self, damping_coefficient):
+        for t in self.types:
+            t.damping_coefficient = damping_coefficient
+            # t.diffusivity = 831447.2 * temperature / (t.mass * damping_coefficient)
+
+if __name__ == "__main__":
+
+    print("TYPES")
+    for n,t in _types.items():
+        print("{}\t{}\t{}\t{}\t{}".format(n, t.name, t.mass, t.charge, t.epsilon))
diff --git a/mrdna/arbdmodel/resources/two_bead_model/BBP.dat b/mrdna/arbdmodel/resources/two_bead_model/BBP.dat
new file mode 100644
index 0000000000000000000000000000000000000000..65eb64969b2499842c9653e22f9639996551ccaf
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/BBP.dat
@@ -0,0 +1,2500 @@
+0.000000 40.295654
+0.020000 40.092237
+0.040000 39.889282
+0.060000 39.686791
+0.080000 39.484761
+0.100000 39.283195
+0.120000 39.082091
+0.140000 38.881449
+0.160000 38.681270
+0.180000 38.481554
+0.200000 38.282301
+0.220000 38.083510
+0.240000 37.885182
+0.260000 37.687316
+0.280000 37.489913
+0.300000 37.292972
+0.320000 37.096495
+0.340000 36.900479
+0.360000 36.704927
+0.380000 36.509837
+0.400000 36.315209
+0.420000 36.121045
+0.440000 35.927343
+0.460000 35.734103
+0.480000 35.541326
+0.500000 35.349012
+0.520000 35.157161
+0.540000 34.965772
+0.560000 34.774845
+0.580000 34.584382
+0.600000 34.394380
+0.620000 34.204842
+0.640000 34.015766
+0.660000 33.827153
+0.680000 33.639002
+0.700000 33.451314
+0.720000 33.264089
+0.740000 33.077326
+0.760000 32.891026
+0.780000 32.705188
+0.800000 32.519814
+0.820000 32.334901
+0.840000 32.150452
+0.860000 31.966465
+0.880000 31.782940
+0.900000 31.599878
+0.920000 31.417279
+0.940000 31.235143
+0.960000 31.053469
+0.980000 30.872258
+1.000000 30.691509
+1.020000 30.511223
+1.040000 30.331399
+1.060000 30.152039
+1.080000 29.973140
+1.100000 29.794705
+1.120000 29.616732
+1.140000 29.439222
+1.160000 29.262174
+1.180000 29.085589
+1.200000 28.909466
+1.220000 28.733806
+1.240000 28.558609
+1.260000 28.383875
+1.280000 28.209603
+1.300000 28.035793
+1.320000 27.862447
+1.340000 27.689562
+1.360000 27.517141
+1.380000 27.345182
+1.400000 27.173686
+1.420000 27.002652
+1.440000 26.832081
+1.460000 26.661973
+1.480000 26.492327
+1.500000 26.323144
+1.520000 26.154423
+1.540000 25.986166
+1.560000 25.818370
+1.580000 25.651038
+1.600000 25.484168
+1.620000 25.317760
+1.640000 25.151815
+1.660000 24.986333
+1.680000 24.821314
+1.700000 24.656757
+1.720000 24.492663
+1.740000 24.329031
+1.760000 24.165862
+1.780000 24.003155
+1.800000 23.840912
+1.820000 23.679130
+1.840000 23.517812
+1.860000 23.356956
+1.880000 23.196563
+1.900000 23.036632
+1.920000 22.877164
+1.940000 22.718158
+1.960000 22.559616
+1.980000 22.401535
+2.000000 22.243918
+2.020000 22.086763
+2.040000 21.930070
+2.060000 21.773841
+2.080000 21.618074
+2.100000 21.462769
+2.120000 21.307927
+2.140000 21.153548
+2.160000 20.999631
+2.180000 20.846177
+2.200000 20.693186
+2.220000 20.540657
+2.240000 20.388591
+2.260000 20.236988
+2.280000 20.085847
+2.300000 19.935168
+2.320000 19.784953
+2.340000 19.635200
+2.360000 19.485909
+2.380000 19.337082
+2.400000 19.188716
+2.420000 19.040814
+2.440000 18.893374
+2.460000 18.746397
+2.480000 18.599882
+2.500000 18.453830
+2.520000 18.308241
+2.540000 18.163114
+2.560000 18.018450
+2.580000 17.874248
+2.600000 17.730509
+2.620000 17.587233
+2.640000 17.444419
+2.660000 17.302068
+2.680000 17.160180
+2.700000 17.018754
+2.720000 16.877790
+2.740000 16.737290
+2.760000 16.597252
+2.780000 16.457677
+2.800000 16.318564
+2.820000 16.179914
+2.840000 16.041726
+2.860000 15.904001
+2.880000 15.766739
+2.900000 15.629940
+2.920000 15.493603
+2.940000 15.357728
+2.960000 15.222316
+2.980000 15.087367
+3.000000 14.952881
+3.020000 14.818857
+3.040000 14.685296
+3.060000 14.552197
+3.080000 14.419561
+3.100000 14.287388
+3.120000 14.155677
+3.140000 14.024429
+3.160000 13.893643
+3.180000 13.763320
+3.200000 13.633460
+3.220000 13.504062
+3.240000 13.375127
+3.260000 13.246655
+3.280000 13.118645
+3.300000 12.991098
+3.320000 12.864013
+3.340000 12.737391
+3.360000 12.611232
+3.380000 12.485535
+3.400000 12.360301
+3.420000 12.235530
+3.440000 12.111221
+3.460000 11.987375
+3.480000 11.863991
+3.500000 11.741070
+3.520000 11.618612
+3.540000 11.496616
+3.560000 11.375083
+3.580000 11.254013
+3.600000 11.133405
+3.620000 11.013259
+3.640000 10.893577
+3.660000 10.774357
+3.680000 10.655599
+3.700000 10.537305
+3.720000 10.419473
+3.740000 10.302103
+3.760000 10.185196
+3.780000 10.068752
+3.800000 9.952770
+3.820000 9.837251
+3.840000 9.722195
+3.860000 9.607601
+3.880000 9.493470
+3.900000 9.379801
+3.920000 9.266596
+3.940000 9.153852
+3.960000 9.041572
+3.980000 8.929754
+4.000000 8.818398
+4.020000 8.707505
+4.040000 8.597075
+4.060000 8.487108
+4.080000 8.377603
+4.100000 8.268560
+4.120000 8.159981
+4.140000 8.051864
+4.160000 7.944209
+4.180000 7.837017
+4.200000 7.730288
+4.220000 7.624021
+4.240000 7.518217
+4.260000 7.412876
+4.280000 7.307997
+4.300000 7.203581
+4.320000 7.099628
+4.340000 6.996137
+4.360000 6.893109
+4.380000 6.790543
+4.400000 6.688440
+4.420000 6.586800
+4.440000 6.485622
+4.460000 6.384907
+4.480000 6.284654
+4.500000 6.184865
+4.520000 6.085537
+4.540000 5.986673
+4.560000 5.888271
+4.580000 5.790331
+4.600000 5.692854
+4.620000 5.595840
+4.640000 5.499289
+4.660000 5.403200
+4.680000 5.307574
+4.700000 5.212410
+4.720000 5.117709
+4.740000 5.023470
+4.760000 4.929695
+4.780000 4.836381
+4.800000 4.743531
+4.820000 4.651143
+4.840000 4.559218
+4.860000 4.467755
+4.880000 4.376755
+4.900000 4.219791
+4.920000 4.003645
+4.940000 3.818706
+4.960000 3.638001
+4.980000 3.479965
+5.000000 3.339221
+5.020000 3.164791
+5.040000 3.024531
+5.060000 2.894090
+5.080000 2.762308
+5.100000 2.643565
+5.120000 2.528576
+5.140000 2.424246
+5.160000 2.327614
+5.180000 2.240899
+5.200000 2.156300
+5.220000 2.077057
+5.240000 1.999188
+5.260000 1.923650
+5.280000 1.856609
+5.300000 1.791263
+5.320000 1.729721
+5.340000 1.674410
+5.360000 1.620918
+5.380000 1.568536
+5.400000 1.516629
+5.420000 1.466401
+5.440000 1.417279
+5.460000 1.369369
+5.480000 1.323259
+5.500000 1.280862
+5.520000 1.241568
+5.540000 1.203703
+5.560000 1.166948
+5.580000 1.131143
+5.600000 1.096437
+5.620000 1.064430
+5.640000 1.034659
+5.660000 1.006834
+5.680000 0.981657
+5.700000 0.959507
+5.720000 0.941014
+5.740000 0.925926
+5.760000 0.914138
+5.780000 0.905254
+5.800000 0.899681
+5.820000 0.896978
+5.840000 0.896578
+5.860000 0.897580
+5.880000 0.898279
+5.900000 0.897015
+5.920000 0.892019
+5.940000 0.883040
+5.960000 0.868368
+5.980000 0.845531
+6.000000 0.814606
+6.020000 0.774177
+6.040000 0.725597
+6.060000 0.667881
+6.080000 0.602893
+6.100000 0.531736
+6.120000 0.456132
+6.140000 0.378988
+6.160000 0.303505
+6.180000 0.231965
+6.200000 0.165840
+6.220000 0.108023
+6.240000 0.060923
+6.260000 0.026418
+6.280000 0.005784
+6.300000 0.000000
+6.320000 0.011066
+6.340000 0.038545
+6.360000 0.084404
+6.380000 0.148576
+6.400000 0.228199
+6.420000 0.325152
+6.440000 0.441572
+6.460000 0.573128
+6.480000 0.723672
+6.500000 0.896418
+6.520000 1.093067
+6.540000 1.307318
+6.560000 1.539229
+6.580000 1.788144
+6.600000 2.064777
+6.620000 2.382618
+6.640000 2.720393
+6.660000 3.025104
+6.680000 3.365429
+6.700000 3.744290
+6.720000 4.147168
+6.740000 4.654314
+6.760000 4.958903
+6.780000 4.782997
+6.800000 4.958903
+6.820000 5.135271
+6.840000 5.312101
+6.860000 5.489395
+6.880000 5.667151
+6.900000 5.845369
+6.920000 6.024050
+6.940000 6.203194
+6.960000 6.382800
+6.980000 6.562869
+7.000000 6.743401
+7.020000 6.924395
+7.040000 7.105852
+7.060000 7.287772
+7.080000 7.470154
+7.100000 7.652998
+7.120000 7.836306
+7.140000 8.020076
+7.160000 8.204308
+7.180000 8.389003
+7.200000 8.574161
+7.220000 8.759782
+7.240000 8.945865
+7.260000 9.132411
+7.280000 9.319419
+7.300000 9.506890
+7.320000 9.694823
+7.340000 9.883220
+7.360000 10.072078
+7.380000 10.261400
+7.400000 10.451184
+7.420000 10.641431
+7.440000 10.832140
+7.460000 11.023312
+7.480000 11.214946
+7.500000 11.407043
+7.520000 11.599603
+7.540000 11.792626
+7.560000 11.986111
+7.580000 12.180058
+7.600000 12.374469
+7.620000 12.569341
+7.640000 12.764677
+7.660000 12.960475
+7.680000 13.156736
+7.700000 13.353459
+7.720000 13.550645
+7.740000 13.748294
+7.760000 13.946405
+7.780000 14.144979
+7.800000 14.344015
+7.820000 14.543515
+7.840000 14.743476
+7.860000 14.943901
+7.880000 15.144788
+7.900000 15.346137
+7.920000 15.547949
+7.940000 15.750224
+7.960000 15.952962
+7.980000 16.156162
+8.000000 16.359825
+8.020000 16.563950
+8.040000 16.768538
+8.060000 16.973588
+8.080000 17.179102
+8.100000 17.385077
+8.120000 17.591516
+8.140000 17.798417
+8.160000 18.005781
+8.180000 18.213607
+8.200000 18.421896
+8.220000 18.630647
+8.240000 18.839861
+8.260000 19.049538
+8.280000 19.259678
+8.300000 19.470280
+8.320000 19.681344
+8.340000 19.892872
+8.360000 20.104861
+8.380000 20.317314
+8.400000 20.530229
+8.420000 20.743607
+8.440000 20.957447
+8.460000 21.171750
+8.480000 21.386516
+8.500000 21.601744
+8.520000 21.817435
+8.540000 22.033588
+8.560000 22.250205
+8.580000 22.467283
+8.600000 22.684825
+8.620000 22.902829
+8.640000 23.121295
+8.660000 23.340224
+8.680000 23.559616
+8.700000 23.779471
+8.720000 23.999788
+8.740000 24.220568
+8.760000 24.441810
+8.780000 24.663515
+8.800000 24.885682
+8.820000 25.108313
+8.840000 25.331405
+8.860000 25.554961
+8.880000 25.778979
+8.900000 26.003460
+8.920000 26.228403
+8.940000 26.453809
+8.960000 26.679677
+8.980000 26.906009
+9.000000 27.132802
+9.020000 27.360059
+9.040000 27.587778
+9.060000 27.815959
+9.080000 28.044604
+9.100000 28.273711
+9.120000 28.503280
+9.140000 28.733312
+9.160000 28.963807
+9.180000 29.194764
+9.200000 29.426184
+9.220000 29.658067
+9.240000 29.890412
+9.260000 30.123220
+9.280000 30.356491
+9.300000 30.590224
+9.320000 30.824419
+9.340000 31.059078
+9.360000 31.294199
+9.380000 31.529782
+9.400000 31.765829
+9.420000 32.002337
+9.440000 32.239309
+9.460000 32.476743
+9.480000 32.714640
+9.500000 32.952999
+9.520000 33.191821
+9.540000 33.431106
+9.560000 33.670853
+9.580000 33.911063
+9.600000 34.151735
+9.620000 34.392870
+9.640000 34.634468
+9.660000 34.876528
+9.680000 35.119051
+9.700000 35.362036
+9.720000 35.605485
+9.740000 35.849395
+9.760000 36.093769
+9.780000 36.338605
+9.800000 36.583904
+9.820000 36.829665
+9.840000 37.075889
+9.860000 37.322575
+9.880000 37.569724
+9.900000 37.817336
+9.920000 38.065411
+9.940000 38.313948
+9.960000 38.562947
+9.980000 38.812409
+10.000000 39.062334
+10.020000 39.312722
+10.040000 39.563572
+10.060000 39.814885
+10.080000 40.066660
+10.100000 40.318898
+10.120000 40.571599
+10.140000 40.824762
+10.160000 41.078388
+10.180000 41.332476
+10.200000 41.587027
+10.220000 41.842041
+10.240000 42.097517
+10.260000 42.353456
+10.280000 42.609858
+10.300000 42.866722
+10.320000 43.124049
+10.340000 43.381838
+10.360000 43.640090
+10.380000 43.898805
+10.400000 44.157982
+10.420000 44.417622
+10.440000 44.677725
+10.460000 44.938290
+10.480000 45.199318
+10.500000 45.460808
+10.520000 45.722761
+10.540000 45.985177
+10.560000 46.248055
+10.580000 46.511396
+10.600000 46.775199
+10.620000 47.039466
+10.640000 47.304194
+10.660000 47.569386
+10.680000 47.835040
+10.700000 48.101156
+10.720000 48.367736
+10.740000 48.634777
+10.760000 48.902282
+10.780000 49.170249
+10.800000 49.438679
+10.820000 49.707571
+10.840000 49.976926
+10.860000 50.246744
+10.880000 50.517024
+10.900000 50.787767
+10.920000 51.058972
+10.940000 51.330640
+10.960000 51.602771
+10.980000 51.875364
+11.000000 52.148420
+11.020000 52.421939
+11.040000 52.695920
+11.060000 52.970364
+11.080000 53.245270
+11.100000 53.520639
+11.120000 53.796471
+11.140000 54.072765
+11.160000 54.349522
+11.180000 54.626742
+11.200000 54.904424
+11.220000 55.182569
+11.240000 55.461176
+11.260000 55.740246
+11.280000 56.019779
+11.300000 56.299774
+11.320000 56.580232
+11.340000 56.861153
+11.360000 57.142536
+11.380000 57.424382
+11.400000 57.706690
+11.420000 57.989461
+11.440000 58.272695
+11.460000 58.556391
+11.480000 58.840550
+11.500000 59.125171
+11.520000 59.410255
+11.540000 59.695802
+11.560000 59.981812
+11.580000 60.268283
+11.600000 60.555218
+11.620000 60.842615
+11.640000 61.130475
+11.660000 61.418798
+11.680000 61.707583
+11.700000 61.996830
+11.720000 62.286541
+11.740000 62.576714
+11.760000 62.867349
+11.780000 63.158448
+11.800000 63.450008
+11.820000 63.742032
+11.840000 64.034518
+11.860000 64.327467
+11.880000 64.620878
+11.900000 64.914752
+11.920000 65.209088
+11.940000 65.503887
+11.960000 65.799149
+11.980000 66.094874
+12.000000 66.391061
+12.020000 66.687710
+12.040000 66.984823
+12.060000 67.282398
+12.080000 67.580435
+12.100000 67.878935
+12.120000 68.177898
+12.140000 68.477323
+12.160000 68.777211
+12.180000 69.077562
+12.200000 69.378375
+12.220000 69.679651
+12.240000 69.981390
+12.260000 70.283591
+12.280000 70.586255
+12.300000 70.889381
+12.320000 71.192970
+12.340000 71.497021
+12.360000 71.801536
+12.380000 72.106513
+12.400000 72.411952
+12.420000 72.717854
+12.440000 73.024219
+12.460000 73.331046
+12.480000 73.638336
+12.500000 73.946089
+12.520000 74.254304
+12.540000 74.562982
+12.560000 74.872122
+12.580000 75.181725
+12.600000 75.491791
+12.620000 75.802319
+12.640000 76.113310
+12.660000 76.424764
+12.680000 76.736680
+12.700000 77.049059
+12.720000 77.361900
+12.740000 77.675204
+12.760000 77.988971
+12.780000 78.303200
+12.800000 78.617892
+12.820000 78.933047
+12.840000 79.248664
+12.860000 79.564743
+12.880000 79.881286
+12.900000 80.198291
+12.920000 80.515758
+12.940000 80.833689
+12.960000 81.152082
+12.980000 81.470937
+13.000000 81.790255
+13.020000 82.110036
+13.040000 82.430279
+13.060000 82.750985
+13.080000 83.072154
+13.100000 83.393785
+13.120000 83.715879
+13.140000 84.038435
+13.160000 84.361455
+13.180000 84.684936
+13.200000 85.008881
+13.220000 85.333288
+13.240000 85.658157
+13.260000 85.983489
+13.280000 86.309284
+13.300000 86.635542
+13.320000 86.962262
+13.340000 87.289444
+13.360000 87.617090
+13.380000 87.945198
+13.400000 88.273768
+13.420000 88.602801
+13.440000 88.932297
+13.460000 89.262256
+13.480000 89.592677
+13.500000 89.923560
+13.520000 90.254907
+13.540000 90.586716
+13.560000 90.918987
+13.580000 91.251721
+13.600000 91.584918
+13.620000 91.918577
+13.640000 92.252699
+13.660000 92.587284
+13.680000 92.922331
+13.700000 93.257841
+13.720000 93.593814
+13.740000 93.930249
+13.760000 94.267147
+13.780000 94.604507
+13.800000 94.942330
+13.820000 95.280615
+13.840000 95.619364
+13.860000 95.958575
+13.880000 96.298248
+13.900000 96.638384
+13.920000 96.978983
+13.940000 97.320044
+13.960000 97.661568
+13.980000 98.003555
+14.000000 98.346004
+14.020000 98.688916
+14.040000 99.032290
+14.060000 99.376127
+14.080000 99.720427
+14.100000 100.065189
+14.120000 100.410414
+14.140000 100.756102
+14.160000 101.102252
+14.180000 101.448865
+14.200000 101.795940
+14.220000 102.143478
+14.240000 102.491479
+14.260000 102.839942
+14.280000 103.188868
+14.300000 103.538257
+14.320000 103.888108
+14.340000 104.238422
+14.360000 104.589198
+14.380000 104.940437
+14.400000 105.292139
+14.420000 105.644303
+14.440000 105.996930
+14.460000 106.350019
+14.480000 106.703571
+14.500000 107.057586
+14.520000 107.412063
+14.540000 107.767003
+14.560000 108.122406
+14.580000 108.478271
+14.600000 108.834599
+14.620000 109.191390
+14.640000 109.548643
+14.660000 109.906358
+14.680000 110.264537
+14.700000 110.623178
+14.720000 110.982281
+14.740000 111.341848
+14.760000 111.701876
+14.780000 112.062368
+14.800000 112.423322
+14.820000 112.784739
+14.840000 113.146618
+14.860000 113.508960
+14.880000 113.871764
+14.900000 114.235032
+14.920000 114.598761
+14.940000 114.962954
+14.960000 115.327609
+14.980000 115.692727
+15.000000 116.058307
+15.020000 116.424350
+15.040000 116.790855
+15.060000 117.157823
+15.080000 117.525254
+15.100000 117.893148
+15.120000 118.261504
+15.140000 118.630322
+15.160000 118.999603
+15.180000 119.369347
+15.200000 119.739554
+15.220000 120.110223
+15.240000 120.481355
+15.260000 120.852949
+15.280000 121.225006
+15.300000 121.597526
+15.320000 121.970508
+15.340000 122.343953
+15.360000 122.717860
+15.380000 123.092230
+15.400000 123.467063
+15.420000 123.842358
+15.440000 124.218116
+15.460000 124.594337
+15.480000 124.971020
+15.500000 125.348166
+15.520000 125.725775
+15.540000 126.103846
+15.560000 126.482379
+15.580000 126.861376
+15.600000 127.240835
+15.620000 127.620756
+15.640000 128.001140
+15.660000 128.381987
+15.680000 128.763297
+15.700000 129.145069
+15.720000 129.527303
+15.740000 129.910001
+15.760000 130.293160
+15.780000 130.676783
+15.800000 131.060868
+15.820000 131.445416
+15.840000 131.830426
+15.860000 132.215899
+15.880000 132.601835
+15.900000 132.988233
+15.920000 133.375094
+15.940000 133.762418
+15.960000 134.150204
+15.980000 134.538452
+16.000000 134.927164
+16.020000 135.316338
+16.040000 135.705974
+16.060000 136.096074
+16.080000 136.486636
+16.100000 136.877660
+16.120000 137.269147
+16.140000 137.661097
+16.160000 138.053509
+16.180000 138.446384
+16.200000 138.839722
+16.220000 139.233522
+16.240000 139.627785
+16.260000 140.022510
+16.280000 140.417698
+16.300000 140.813349
+16.320000 141.209462
+16.340000 141.606038
+16.360000 142.003077
+16.380000 142.400578
+16.400000 142.798542
+16.420000 143.196968
+16.440000 143.595857
+16.460000 143.995209
+16.480000 144.395023
+16.500000 144.795300
+16.520000 145.196040
+16.540000 145.597242
+16.560000 145.998907
+16.580000 146.401034
+16.600000 146.803624
+16.620000 147.206677
+16.640000 147.610192
+16.660000 148.014170
+16.680000 148.418610
+16.700000 148.823514
+16.720000 149.228879
+16.740000 149.634708
+16.760000 150.040999
+16.780000 150.447752
+16.800000 150.854969
+16.820000 151.262647
+16.840000 151.670789
+16.860000 152.079393
+16.880000 152.488460
+16.900000 152.897989
+16.920000 153.307981
+16.940000 153.718436
+16.960000 154.129353
+16.980000 154.540733
+17.000000 154.952575
+17.020000 155.364880
+17.040000 155.777648
+17.060000 156.190878
+17.080000 156.604571
+17.100000 157.018727
+17.120000 157.433345
+17.140000 157.848426
+17.160000 158.263969
+17.180000 158.679975
+17.200000 159.096444
+17.220000 159.513375
+17.240000 159.930769
+17.260000 160.348626
+17.280000 160.766945
+17.300000 161.185727
+17.320000 161.604971
+17.340000 162.024678
+17.360000 162.444848
+17.380000 162.865480
+17.400000 163.286575
+17.420000 163.708132
+17.440000 164.130152
+17.460000 164.552635
+17.480000 164.975581
+17.500000 165.398989
+17.520000 165.822859
+17.540000 166.247192
+17.560000 166.671988
+17.580000 167.097247
+17.600000 167.522968
+17.620000 167.949152
+17.640000 168.375798
+17.660000 168.802907
+17.680000 169.230479
+17.700000 169.658513
+17.720000 170.087010
+17.740000 170.515969
+17.760000 170.945391
+17.780000 171.375276
+17.800000 171.805623
+17.820000 172.236433
+17.840000 172.667706
+17.860000 173.099441
+17.880000 173.531639
+17.900000 173.964299
+17.920000 174.397422
+17.940000 174.831008
+17.960000 175.265056
+17.980000 175.699567
+18.000000 176.134541
+18.020000 176.569977
+18.040000 177.005875
+18.060000 177.442237
+18.080000 177.879061
+18.100000 178.316348
+18.120000 178.754097
+18.140000 179.192309
+18.160000 179.630983
+18.180000 180.070120
+18.200000 180.509720
+18.220000 180.949783
+18.240000 181.390308
+18.260000 181.831295
+18.280000 182.272745
+18.300000 182.714658
+18.320000 183.157034
+18.340000 183.599872
+18.360000 184.043173
+18.380000 184.486936
+18.400000 184.931162
+18.420000 185.375850
+18.440000 185.821002
+18.460000 186.266616
+18.480000 186.712692
+18.500000 187.159231
+18.520000 187.606233
+18.540000 188.053697
+18.560000 188.501624
+18.580000 188.950014
+18.600000 189.398866
+18.620000 189.848181
+18.640000 190.297958
+18.660000 190.748198
+18.680000 191.198901
+18.700000 191.650066
+18.720000 192.101694
+18.740000 192.553785
+18.760000 193.006338
+18.780000 193.459353
+18.800000 193.912832
+18.820000 194.366773
+18.840000 194.821177
+18.860000 195.276043
+18.880000 195.731372
+18.900000 196.187163
+18.920000 196.643417
+18.940000 197.100134
+18.960000 197.557314
+18.980000 198.014956
+19.000000 198.473060
+19.020000 198.931627
+19.040000 199.390657
+19.060000 199.850150
+19.080000 200.310105
+19.100000 200.770523
+19.120000 201.231403
+19.140000 201.692746
+19.160000 202.154552
+19.180000 202.616820
+19.200000 203.079551
+19.220000 203.542744
+19.240000 204.006400
+19.260000 204.470519
+19.280000 204.935100
+19.300000 205.400144
+19.320000 205.865651
+19.340000 206.331620
+19.360000 206.798052
+19.380000 207.264946
+19.400000 207.732303
+19.420000 208.200123
+19.440000 208.668405
+19.460000 209.137150
+19.480000 209.606358
+19.500000 210.076028
+19.520000 210.546161
+19.540000 211.016756
+19.560000 211.487814
+19.580000 211.959335
+19.600000 212.431318
+19.620000 212.903764
+19.640000 213.376672
+19.660000 213.850043
+19.680000 214.323877
+19.700000 214.798174
+19.720000 215.272933
+19.740000 215.748154
+19.760000 216.223838
+19.780000 216.699985
+19.800000 217.176595
+19.820000 217.653667
+19.840000 218.131202
+19.860000 218.609199
+19.880000 219.087659
+19.900000 219.566582
+19.920000 220.045967
+19.940000 220.525815
+19.960000 221.006125
+19.980000 221.486898
+20.000000 221.968134
+20.020000 222.449832
+20.040000 222.931993
+20.060000 223.414617
+20.080000 223.897703
+20.100000 224.381252
+20.120000 224.865263
+20.140000 225.349737
+20.160000 225.834674
+20.180000 226.320073
+20.200000 226.805935
+20.220000 227.292260
+20.240000 227.779047
+20.260000 228.266297
+20.280000 228.754009
+20.300000 229.242184
+20.320000 229.730822
+20.340000 230.219922
+20.360000 230.709485
+20.380000 231.199510
+20.400000 231.689999
+20.420000 232.180949
+20.440000 232.672363
+20.460000 233.164239
+20.480000 233.656577
+20.500000 234.149379
+20.520000 234.642643
+20.540000 235.136369
+20.560000 235.630558
+20.580000 236.125210
+20.600000 236.620324
+20.620000 237.115901
+20.640000 237.611941
+20.660000 238.108443
+20.680000 238.605408
+20.700000 239.102835
+20.720000 239.600725
+20.740000 240.099078
+20.760000 240.597893
+20.780000 241.097171
+20.800000 241.596912
+20.820000 242.097115
+20.840000 242.597781
+20.860000 243.098909
+20.880000 243.600500
+20.900000 244.102554
+20.920000 244.605070
+20.940000 245.108049
+20.960000 245.611491
+20.980000 246.115395
+21.000000 246.619762
+21.020000 247.124591
+21.040000 247.629883
+21.060000 248.135638
+21.080000 248.641855
+21.100000 249.148535
+21.120000 249.655678
+21.140000 250.163283
+21.160000 250.671351
+21.180000 251.179881
+21.200000 251.688874
+21.220000 252.198330
+21.240000 252.708248
+21.260000 253.218629
+21.280000 253.729472
+21.300000 254.240778
+21.320000 254.752547
+21.340000 255.264778
+21.360000 255.777472
+21.380000 256.290629
+21.400000 256.804248
+21.420000 257.318330
+21.440000 257.832875
+21.460000 258.347882
+21.480000 258.863351
+21.500000 259.379284
+21.520000 259.895679
+21.540000 260.412536
+21.560000 260.929856
+21.580000 261.447639
+21.600000 261.965885
+21.620000 262.484593
+21.640000 263.003763
+21.660000 263.523397
+21.680000 264.043493
+21.700000 264.564051
+21.720000 265.085072
+21.740000 265.606556
+21.760000 266.128503
+21.780000 266.650912
+21.800000 267.173783
+21.820000 267.697118
+21.840000 268.220914
+21.860000 268.745174
+21.880000 269.269896
+21.900000 269.795081
+21.920000 270.320728
+21.940000 270.846838
+21.960000 271.373411
+21.980000 271.900446
+22.000000 272.427944
+22.020000 272.955905
+22.040000 273.484328
+22.060000 274.013213
+22.080000 274.542562
+22.100000 275.072373
+22.120000 275.602646
+22.140000 276.133383
+22.160000 276.664581
+22.180000 277.196243
+22.200000 277.728367
+22.220000 278.260954
+22.240000 278.794003
+22.260000 279.327515
+22.280000 279.861490
+22.300000 280.395927
+22.320000 280.930827
+22.340000 281.466189
+22.360000 282.002014
+22.380000 282.538302
+22.400000 283.075052
+22.420000 283.612265
+22.440000 284.149941
+22.460000 284.688079
+22.480000 285.226680
+22.500000 285.765743
+22.520000 286.305269
+22.540000 286.845258
+22.560000 287.385709
+22.580000 287.926623
+22.600000 288.467999
+22.620000 289.009839
+22.640000 289.552140
+22.660000 290.094905
+22.680000 290.638132
+22.700000 291.181821
+22.720000 291.725974
+22.740000 292.270588
+22.760000 292.815666
+22.780000 293.361206
+22.800000 293.907209
+22.820000 294.453674
+22.840000 295.000602
+22.860000 295.547993
+22.880000 296.095846
+22.900000 296.644162
+22.920000 297.192940
+22.940000 297.742181
+22.960000 298.291885
+22.980000 298.842051
+23.000000 299.392680
+23.020000 299.943772
+23.040000 300.495326
+23.060000 301.047343
+23.080000 301.599822
+23.100000 302.152765
+23.120000 302.706169
+23.140000 303.260037
+23.160000 303.814366
+23.180000 304.369159
+23.200000 304.924414
+23.220000 305.480132
+23.240000 306.036312
+23.260000 306.592955
+23.280000 307.150061
+23.300000 307.707629
+23.320000 308.265660
+23.340000 308.824154
+23.360000 309.383110
+23.380000 309.942529
+23.400000 310.502410
+23.420000 311.062754
+23.440000 311.623561
+23.460000 312.184830
+23.480000 312.746562
+23.500000 313.308756
+23.520000 313.871414
+23.540000 314.434533
+23.560000 314.998116
+23.580000 315.562161
+23.600000 316.126668
+23.620000 316.691638
+23.640000 317.257071
+23.660000 317.822967
+23.680000 318.389325
+23.700000 318.956146
+23.720000 319.523429
+23.740000 320.091175
+23.760000 320.659383
+23.780000 321.228055
+23.800000 321.797189
+23.820000 322.366785
+23.840000 322.936844
+23.860000 323.507366
+23.880000 324.078350
+23.900000 324.649797
+23.920000 325.221707
+23.940000 325.794079
+23.960000 326.366913
+23.980000 326.940211
+24.000000 327.513971
+24.020000 328.088194
+24.040000 328.662879
+24.060000 329.238027
+24.080000 329.813637
+24.100000 330.389710
+24.120000 330.966246
+24.140000 331.543245
+24.160000 332.120706
+24.180000 332.698629
+24.200000 333.277016
+24.220000 333.855864
+24.240000 334.435176
+24.260000 335.014950
+24.280000 335.595187
+24.300000 336.175886
+24.320000 336.757048
+24.340000 337.338673
+24.360000 337.920760
+24.380000 338.503310
+24.400000 339.086322
+24.420000 339.669797
+24.440000 340.253735
+24.460000 340.838135
+24.480000 341.422998
+24.500000 342.008324
+24.520000 342.594112
+24.540000 343.180363
+24.560000 343.767077
+24.580000 344.354253
+24.600000 344.941891
+24.620000 345.529993
+24.640000 346.118557
+24.660000 346.707583
+24.680000 347.297072
+24.700000 347.887024
+24.720000 348.477438
+24.740000 349.068316
+24.760000 349.659655
+24.780000 350.251457
+24.800000 350.843722
+24.820000 351.436450
+24.840000 352.029640
+24.860000 352.623293
+24.880000 353.217408
+24.900000 353.811986
+24.920000 354.407027
+24.940000 355.002530
+24.960000 355.598496
+24.980000 356.194925
+25.000000 356.791816
+25.020000 357.389169
+25.040000 357.986986
+25.060000 358.585265
+25.080000 359.184006
+25.100000 359.783211
+25.120000 360.382877
+25.140000 360.983007
+25.160000 361.583599
+25.180000 362.184654
+25.200000 362.786171
+25.220000 363.388151
+25.240000 363.990594
+25.260000 364.593499
+25.280000 365.196867
+25.300000 365.800697
+25.320000 366.404990
+25.340000 367.009746
+25.360000 367.614964
+25.380000 368.220645
+25.400000 368.826789
+25.420000 369.433395
+25.440000 370.040464
+25.460000 370.647995
+25.480000 371.255989
+25.500000 371.864446
+25.520000 372.473365
+25.540000 373.082747
+25.560000 373.692592
+25.580000 374.302899
+25.600000 374.913668
+25.620000 375.524901
+25.640000 376.136596
+25.660000 376.748754
+25.680000 377.361374
+25.700000 377.974457
+25.720000 378.588002
+25.740000 379.202010
+25.760000 379.816481
+25.780000 380.431414
+25.800000 381.046810
+25.820000 381.662669
+25.840000 382.278990
+25.860000 382.895774
+25.880000 383.513021
+25.900000 384.130730
+25.920000 384.748901
+25.940000 385.367536
+25.960000 385.986633
+25.980000 386.606192
+26.000000 387.226215
+26.020000 387.846699
+26.040000 388.467647
+26.060000 389.089057
+26.080000 389.710930
+26.100000 390.333265
+26.120000 390.956063
+26.140000 391.579323
+26.160000 392.203047
+26.180000 392.827232
+26.200000 393.451881
+26.220000 394.076992
+26.240000 394.702566
+26.260000 395.328602
+26.280000 395.955101
+26.300000 396.582062
+26.320000 397.209486
+26.340000 397.837373
+26.360000 398.465723
+26.380000 399.094535
+26.400000 399.723809
+26.420000 400.353547
+26.440000 400.983746
+26.460000 401.614409
+26.480000 402.245534
+26.500000 402.877122
+26.520000 403.509172
+26.540000 404.141685
+26.560000 404.774661
+26.580000 405.408099
+26.600000 406.042000
+26.620000 406.676363
+26.640000 407.311189
+26.660000 407.946478
+26.680000 408.582230
+26.700000 409.218444
+26.720000 409.855120
+26.740000 410.492259
+26.760000 411.129861
+26.780000 411.767926
+26.800000 412.406453
+26.820000 413.045442
+26.840000 413.684895
+26.860000 414.324810
+26.880000 414.965187
+26.900000 415.606027
+26.920000 416.247330
+26.940000 416.889096
+26.960000 417.531324
+26.980000 418.174014
+27.000000 418.817168
+27.020000 419.460784
+27.040000 420.104862
+27.060000 420.749403
+27.080000 421.394407
+27.100000 422.039873
+27.120000 422.685802
+27.140000 423.332194
+27.160000 423.979048
+27.180000 424.626365
+27.200000 425.274145
+27.220000 425.922387
+27.240000 426.571092
+27.260000 427.220259
+27.280000 427.869889
+27.300000 428.519982
+27.320000 429.170537
+27.340000 429.821555
+27.360000 430.473035
+27.380000 431.124978
+27.400000 431.777384
+27.420000 432.430252
+27.440000 433.083583
+27.460000 433.737377
+27.480000 434.391633
+27.500000 435.046352
+27.520000 435.701533
+27.540000 436.357178
+27.560000 437.013284
+27.580000 437.669854
+27.600000 438.326885
+27.620000 438.984380
+27.640000 439.642337
+27.660000 440.300757
+27.680000 440.959639
+27.700000 441.618985
+27.720000 442.278792
+27.740000 442.939062
+27.760000 443.599795
+27.780000 444.260991
+27.800000 444.922649
+27.820000 445.584770
+27.840000 446.247353
+27.860000 446.910399
+27.880000 447.573908
+27.900000 448.237879
+27.920000 448.902313
+27.940000 449.567210
+27.960000 450.232569
+27.980000 450.898390
+28.000000 451.564675
+28.020000 452.231422
+28.040000 452.898631
+28.060000 453.566304
+28.080000 454.234439
+28.100000 454.903036
+28.120000 455.572096
+28.140000 456.241619
+28.160000 456.911604
+28.180000 457.582052
+28.200000 458.252963
+28.220000 458.924336
+28.240000 459.596172
+28.260000 460.268470
+28.280000 460.941231
+28.300000 461.614455
+28.320000 462.288141
+28.340000 462.962290
+28.360000 463.636902
+28.380000 464.311976
+28.400000 464.987513
+28.420000 465.663512
+28.440000 466.339974
+28.460000 467.016899
+28.480000 467.694286
+28.500000 468.372136
+28.520000 469.050449
+28.540000 469.729224
+28.560000 470.408462
+28.580000 471.088162
+28.600000 471.768325
+28.620000 472.448951
+28.640000 473.130039
+28.660000 473.811590
+28.680000 474.493604
+28.700000 475.176080
+28.720000 475.859018
+28.740000 476.542420
+28.760000 477.226284
+28.780000 477.910610
+28.800000 478.595400
+28.820000 479.280652
+28.840000 479.966366
+28.860000 480.652543
+28.880000 481.339183
+28.900000 482.026285
+28.920000 482.713850
+28.940000 483.401878
+28.960000 484.090368
+28.980000 484.779321
+29.000000 485.468736
+29.020000 486.158614
+29.040000 486.848955
+29.060000 487.539758
+29.080000 488.231024
+29.100000 488.922753
+29.120000 489.614944
+29.140000 490.307598
+29.160000 491.000714
+29.180000 491.694293
+29.200000 492.388335
+29.220000 493.082839
+29.240000 493.777806
+29.260000 494.473236
+29.280000 495.169128
+29.300000 495.865483
+29.320000 496.562300
+29.340000 497.259580
+29.360000 497.957323
+29.380000 498.655528
+29.400000 499.354196
+29.420000 500.053327
+29.440000 500.752920
+29.460000 501.452975
+29.480000 502.153494
+29.500000 502.854475
+29.520000 503.555918
+29.540000 504.257825
+29.560000 504.960194
+29.580000 505.663025
+29.600000 506.366319
+29.620000 507.070076
+29.640000 507.774295
+29.660000 508.478977
+29.680000 509.184122
+29.700000 509.889729
+29.720000 510.595799
+29.740000 511.302331
+29.760000 512.009326
+29.780000 512.716784
+29.800000 513.424704
+29.820000 514.133087
+29.840000 514.841933
+29.860000 515.551241
+29.880000 516.261012
+29.900000 516.971245
+29.920000 517.681941
+29.940000 518.393100
+29.960000 519.104721
+29.980000 519.816805
+30.000000 520.529352
+30.020000 521.242361
+30.040000 521.955833
+30.060000 522.669767
+30.080000 523.384164
+30.100000 524.099024
+30.120000 524.814346
+30.140000 525.530131
+30.160000 526.246379
+30.180000 526.963089
+30.200000 527.680262
+30.220000 528.397897
+30.240000 529.115995
+30.260000 529.834556
+30.280000 530.553579
+30.300000 531.273065
+30.320000 531.993013
+30.340000 532.713424
+30.360000 533.434298
+30.380000 534.155634
+30.400000 534.877433
+30.420000 535.599695
+30.440000 536.322419
+30.460000 537.045606
+30.480000 537.769255
+30.500000 538.493368
+30.520000 539.217942
+30.540000 539.942980
+30.560000 540.668480
+30.580000 541.394442
+30.600000 542.120867
+30.620000 542.847755
+30.640000 543.575106
+30.660000 544.302919
+30.680000 545.031194
+30.700000 545.759933
+30.720000 546.489134
+30.740000 547.218797
+30.760000 547.948923
+30.780000 548.679512
+30.800000 549.410563
+30.820000 550.142077
+30.840000 550.874054
+30.860000 551.606493
+30.880000 552.339395
+30.900000 553.072760
+30.920000 553.806587
+30.940000 554.540877
+30.960000 555.275629
+30.980000 556.010844
+31.000000 556.746522
+31.020000 557.482662
+31.040000 558.219265
+31.060000 558.956330
+31.080000 559.693858
+31.100000 560.431849
+31.120000 561.170303
+31.140000 561.909219
+31.160000 562.648597
+31.180000 563.388438
+31.200000 564.128742
+31.220000 564.869509
+31.240000 565.610738
+31.260000 566.352429
+31.280000 567.094584
+31.300000 567.837201
+31.320000 568.580280
+31.340000 569.323823
+31.360000 570.067827
+31.380000 570.812295
+31.400000 571.557225
+31.420000 572.302618
+31.440000 573.048473
+31.460000 573.794791
+31.480000 574.541571
+31.500000 575.288814
+31.520000 576.036520
+31.540000 576.784689
+31.560000 577.533320
+31.580000 578.282413
+31.600000 579.031970
+31.620000 579.781989
+31.640000 580.532470
+31.660000 581.283414
+31.680000 582.034821
+31.700000 582.786690
+31.720000 583.539022
+31.740000 584.291817
+31.760000 585.045074
+31.780000 585.798794
+31.800000 586.552977
+31.820000 587.307622
+31.840000 588.062729
+31.860000 588.818300
+31.880000 589.574333
+31.900000 590.330828
+31.920000 591.087787
+31.940000 591.845207
+31.960000 592.603091
+31.980000 593.361437
+32.000000 594.120246
+32.020000 594.879517
+32.040000 595.639251
+32.060000 596.399448
+32.080000 597.160107
+32.100000 597.921229
+32.120000 598.682813
+32.140000 599.444860
+32.160000 600.207370
+32.180000 600.970342
+32.200000 601.733777
+32.220000 602.497675
+32.240000 603.262035
+32.260000 604.026858
+32.280000 604.792143
+32.300000 605.557891
+32.320000 606.324102
+32.340000 607.090775
+32.360000 607.857911
+32.380000 608.625509
+32.400000 609.393570
+32.420000 610.162094
+32.440000 610.931081
+32.460000 611.700530
+32.480000 612.470441
+32.500000 613.240816
+32.520000 614.011652
+32.540000 614.782952
+32.560000 615.554714
+32.580000 616.326939
+32.600000 617.099626
+32.620000 617.872776
+32.640000 618.646389
+32.660000 619.420464
+32.680000 620.195002
+32.700000 620.970002
+32.720000 621.745465
+32.740000 622.521391
+32.760000 623.297779
+32.780000 624.074630
+32.800000 624.851944
+32.820000 625.629720
+32.840000 626.407959
+32.860000 627.186660
+32.880000 627.965824
+32.900000 628.745451
+32.920000 629.525540
+32.940000 630.306092
+32.960000 631.087107
+32.980000 631.868584
+33.000000 632.650524
+33.020000 633.432926
+33.040000 634.215791
+33.060000 634.999119
+33.080000 635.782909
+33.100000 636.567162
+33.120000 637.351878
+33.140000 638.137056
+33.160000 638.922697
+33.180000 639.708800
+33.200000 640.495366
+33.220000 641.282395
+33.240000 642.069886
+33.260000 642.857840
+33.280000 643.646256
+33.300000 644.435135
+33.320000 645.224477
+33.340000 646.014282
+33.360000 646.804549
+33.380000 647.595278
+33.400000 648.386470
+33.420000 649.178125
+33.440000 649.970243
+33.460000 650.762823
+33.480000 651.555865
+33.500000 652.349371
+33.520000 653.143339
+33.540000 653.937769
+33.560000 654.732663
+33.580000 655.528018
+33.600000 656.323837
+33.620000 657.120118
+33.640000 657.916862
+33.660000 658.714068
+33.680000 659.511737
+33.700000 660.309868
+33.720000 661.108463
+33.740000 661.907519
+33.760000 662.707039
+33.780000 663.507021
+33.800000 664.307465
+33.820000 665.108373
+33.840000 665.909743
+33.860000 666.711575
+33.880000 667.513870
+33.900000 668.316628
+33.920000 669.119848
+33.940000 669.923531
+33.960000 670.727677
+33.980000 671.532285
+34.000000 672.337356
+34.020000 673.142890
+34.040000 673.948886
+34.060000 674.755345
+34.080000 675.562266
+34.100000 676.369650
+34.120000 677.177497
+34.140000 677.985806
+34.160000 678.794578
+34.180000 679.603812
+34.200000 680.413509
+34.220000 681.223669
+34.240000 682.034291
+34.260000 682.845376
+34.280000 683.656924
+34.300000 684.468934
+34.320000 685.281407
+34.340000 686.094342
+34.360000 686.907740
+34.380000 687.721601
+34.400000 688.535924
+34.420000 689.350710
+34.440000 690.165959
+34.460000 690.981670
+34.480000 691.797844
+34.500000 692.614480
+34.520000 693.431579
+34.540000 694.249141
+34.560000 695.067165
+34.580000 695.885652
+34.600000 696.704602
+34.620000 697.524014
+34.640000 698.343889
+34.660000 699.164226
+34.680000 699.985026
+34.700000 700.806289
+34.720000 701.628014
+34.740000 702.450202
+34.760000 703.272852
+34.780000 704.095965
+34.800000 704.919541
+34.820000 705.743580
+34.840000 706.568081
+34.860000 707.393044
+34.880000 708.218470
+34.900000 709.044359
+34.920000 709.870711
+34.940000 710.697525
+34.960000 711.524801
+34.980000 712.352541
+35.000000 713.180743
+35.020000 714.009407
+35.040000 714.838535
+35.060000 715.668124
+35.080000 716.498177
+35.100000 717.328692
+35.120000 718.159670
+35.140000 718.991110
+35.160000 719.823013
+35.180000 720.655378
+35.200000 721.488207
+35.220000 722.321497
+35.240000 723.155251
+35.260000 723.989467
+35.280000 724.824146
+35.300000 725.659287
+35.320000 726.494891
+35.340000 727.330957
+35.360000 728.167486
+35.380000 729.004478
+35.400000 729.841933
+35.420000 730.679850
+35.440000 731.518229
+35.460000 732.357071
+35.480000 733.196376
+35.500000 734.036144
+35.520000 734.876374
+35.540000 735.717067
+35.560000 736.558222
+35.580000 737.399840
+35.600000 738.241921
+35.620000 739.084464
+35.640000 739.927470
+35.660000 740.770938
+35.680000 741.614869
+35.700000 742.459263
+35.720000 743.304119
+35.740000 744.149438
+35.760000 744.995220
+35.780000 745.841464
+35.800000 746.688171
+35.820000 747.535340
+35.840000 748.382973
+35.860000 749.231067
+35.880000 750.079625
+35.900000 750.928644
+35.920000 751.778127
+35.940000 752.628072
+35.960000 753.478480
+35.980000 754.329350
+36.000000 755.180684
+36.020000 756.032479
+36.040000 756.884737
+36.060000 757.737458
+36.080000 758.590642
+36.100000 759.444288
+36.120000 760.298397
+36.140000 761.152968
+36.160000 762.008002
+36.180000 762.863499
+36.200000 763.719458
+36.220000 764.575880
+36.240000 765.432765
+36.260000 766.290112
+36.280000 767.147921
+36.300000 768.006194
+36.320000 768.864929
+36.340000 769.724126
+36.360000 770.583787
+36.380000 771.443909
+36.400000 772.304495
+36.420000 773.165543
+36.440000 774.027054
+36.460000 774.889027
+36.480000 775.751463
+36.500000 776.614362
+36.520000 777.477723
+36.540000 778.341547
+36.560000 779.205833
+36.580000 780.070582
+36.600000 780.935794
+36.620000 781.801468
+36.640000 782.667605
+36.660000 783.534205
+36.680000 784.401267
+36.700000 785.268792
+36.720000 786.136779
+36.740000 787.005229
+36.760000 787.874142
+36.780000 788.743517
+36.800000 789.613355
+36.820000 790.483656
+36.840000 791.354419
+36.860000 792.225645
+36.880000 793.097333
+36.900000 793.969484
+36.920000 794.842098
+36.940000 795.715174
+36.960000 796.588713
+36.980000 797.462714
+37.000000 798.337178
+37.020000 799.212105
+37.040000 800.087495
+37.060000 800.963347
+37.080000 801.839661
+37.100000 802.716438
+37.120000 803.593678
+37.140000 804.471381
+37.160000 805.349546
+37.180000 806.228174
+37.200000 807.107264
+37.220000 807.986817
+37.240000 808.866832
+37.260000 809.747311
+37.280000 810.628251
+37.300000 811.509655
+37.320000 812.391521
+37.340000 813.273850
+37.360000 814.156641
+37.380000 815.039895
+37.400000 815.923612
+37.420000 816.807791
+37.440000 817.692433
+37.460000 818.577537
+37.480000 819.463104
+37.500000 820.349134
+37.520000 821.235626
+37.540000 822.122581
+37.560000 823.009998
+37.580000 823.897879
+37.600000 824.786221
+37.620000 825.675027
+37.640000 826.564295
+37.660000 827.454025
+37.680000 828.344219
+37.700000 829.234875
+37.720000 830.125993
+37.740000 831.017574
+37.760000 831.909618
+37.780000 832.802124
+37.800000 833.695093
+37.820000 834.588525
+37.840000 835.482419
+37.860000 836.376776
+37.880000 837.271596
+37.900000 838.166878
+37.920000 839.062622
+37.940000 839.958830
+37.960000 840.855500
+37.980000 841.752632
+38.000000 842.650227
+38.020000 843.548285
+38.040000 844.446806
+38.060000 845.345789
+38.080000 846.245235
+38.100000 847.145143
+38.120000 848.045514
+38.140000 848.946347
+38.160000 849.847644
+38.180000 850.749402
+38.200000 851.651624
+38.220000 852.554308
+38.240000 853.457455
+38.260000 854.361064
+38.280000 855.265136
+38.300000 856.169670
+38.320000 857.074667
+38.340000 857.980127
+38.360000 858.886050
+38.380000 859.792435
+38.400000 860.699282
+38.420000 861.606593
+38.440000 862.514365
+38.460000 863.422601
+38.480000 864.331299
+38.500000 865.240460
+38.520000 866.150083
+38.540000 867.060169
+38.560000 867.970718
+38.580000 868.881729
+38.600000 869.793203
+38.620000 870.705139
+38.640000 871.617539
+38.660000 872.530400
+38.680000 873.443725
+38.700000 874.357512
+38.720000 875.271761
+38.740000 876.186473
+38.760000 877.101648
+38.780000 878.017286
+38.800000 878.933386
+38.820000 879.849948
+38.840000 880.766974
+38.860000 881.684462
+38.880000 882.602412
+38.900000 883.520826
+38.920000 884.439701
+38.940000 885.359040
+38.960000 886.278841
+38.980000 887.199104
+39.000000 888.119831
+39.020000 889.041020
+39.040000 889.962671
+39.060000 890.884785
+39.080000 891.807362
+39.100000 892.730402
+39.120000 893.653904
+39.140000 894.577868
+39.160000 895.502296
+39.180000 896.427185
+39.200000 897.352538
+39.220000 898.278353
+39.240000 899.204631
+39.260000 900.131371
+39.280000 901.058574
+39.300000 901.986240
+39.320000 902.914368
+39.340000 903.842959
+39.360000 904.772012
+39.380000 905.701529
+39.400000 906.631507
+39.420000 907.561949
+39.440000 908.492853
+39.460000 909.424219
+39.480000 910.356048
+39.500000 911.288340
+39.520000 912.221095
+39.540000 913.154312
+39.560000 914.087991
+39.580000 915.022134
+39.600000 915.956739
+39.620000 916.891806
+39.640000 917.827336
+39.660000 918.763329
+39.680000 919.699785
+39.700000 920.636703
+39.720000 921.574083
+39.740000 922.511927
+39.760000 923.450233
+39.780000 924.389001
+39.800000 925.328232
+39.820000 926.267926
+39.840000 927.208083
+39.860000 928.148702
+39.880000 929.089783
+39.900000 930.031328
+39.920000 930.973334
+39.940000 931.915804
+39.960000 932.858736
+39.980000 933.802131
+40.000000 934.745988
+40.020000 935.690308
+40.040000 936.635091
+40.060000 937.580336
+40.080000 938.526044
+40.100000 939.472214
+40.120000 940.418848
+40.140000 941.365943
+40.160000 942.313502
+40.180000 943.261523
+40.200000 944.210006
+40.220000 945.158952
+40.240000 946.108361
+40.260000 947.058233
+40.280000 948.008567
+40.300000 948.959364
+40.320000 949.910623
+40.340000 950.862345
+40.360000 951.814529
+40.380000 952.767177
+40.400000 953.720286
+40.420000 954.673859
+40.440000 955.627894
+40.460000 956.582392
+40.480000 957.537352
+40.500000 958.492775
+40.520000 959.448660
+40.540000 960.405008
+40.560000 961.361819
+40.580000 962.319093
+40.600000 963.276829
+40.620000 964.235027
+40.640000 965.193689
+40.660000 966.152813
+40.680000 967.112399
+40.700000 968.072448
+40.720000 969.032960
+40.740000 969.993934
+40.760000 970.955371
+40.780000 971.917271
+40.800000 972.879633
+40.820000 973.842458
+40.840000 974.805746
+40.860000 975.769496
+40.880000 976.733708
+40.900000 977.698384
+40.920000 978.663522
+40.940000 979.629122
+40.960000 980.595186
+40.980000 981.561711
+41.000000 982.528700
+41.020000 983.496151
+41.040000 984.464065
+41.060000 985.432441
+41.080000 986.401280
+41.100000 987.370581
+41.120000 988.340346
+41.140000 989.310573
+41.160000 990.281262
+41.180000 991.252414
+41.200000 992.224029
+41.220000 993.196106
+41.240000 994.168646
+41.260000 995.141648
+41.280000 996.115114
+41.300000 997.089041
+41.320000 998.063432
+41.340000 999.038285
+41.360000 1000.013601
+41.380000 1000.989379
+41.400000 1001.965620
+41.420000 1002.942323
+41.440000 1003.919489
+41.460000 1004.897118
+41.480000 1005.875209
+41.500000 1006.853763
+41.520000 1007.832780
+41.540000 1008.812259
+41.560000 1009.792201
+41.580000 1010.772606
+41.600000 1011.753473
+41.620000 1012.734803
+41.640000 1013.716595
+41.660000 1014.698850
+41.680000 1015.681568
+41.700000 1016.664748
+41.720000 1017.648391
+41.740000 1018.632496
+41.760000 1019.617064
+41.780000 1020.602095
+41.800000 1021.587588
+41.820000 1022.573544
+41.840000 1023.559963
+41.860000 1024.546844
+41.880000 1025.534188
+41.900000 1026.521994
+41.920000 1027.510263
+41.940000 1028.498995
+41.960000 1029.488189
+41.980000 1030.477846
+42.000000 1031.467966
+42.020000 1032.458548
+42.040000 1033.449593
+42.060000 1034.441100
+42.080000 1035.433070
+42.100000 1036.425503
+42.120000 1037.418398
+42.140000 1038.411756
+42.160000 1039.405576
+42.180000 1040.399860
+42.200000 1041.394605
+42.220000 1042.389814
+42.240000 1043.385485
+42.260000 1044.381618
+42.280000 1045.378215
+42.300000 1046.375273
+42.320000 1047.372795
+42.340000 1048.370779
+42.360000 1049.369226
+42.380000 1050.368135
+42.400000 1051.367507
+42.420000 1052.367342
+42.440000 1053.367639
+42.460000 1054.368399
+42.480000 1055.369621
+42.500000 1056.371306
+42.520000 1057.373454
+42.540000 1058.376064
+42.560000 1059.379137
+42.580000 1060.382673
+42.600000 1061.386671
+42.620000 1062.391132
+42.640000 1063.396055
+42.660000 1064.401441
+42.680000 1065.407290
+42.700000 1066.413601
+42.720000 1067.420375
+42.740000 1068.427612
+42.760000 1069.435311
+42.780000 1070.443473
+42.800000 1071.452097
+42.820000 1072.461184
+42.840000 1073.470734
+42.860000 1074.480746
+42.880000 1075.491221
+42.900000 1076.502159
+42.920000 1077.513559
+42.940000 1078.525422
+42.960000 1079.537747
+42.980000 1080.550535
+43.000000 1081.563786
+43.020000 1082.577499
+43.040000 1083.591675
+43.060000 1084.606313
+43.080000 1085.621414
+43.100000 1086.636978
+43.120000 1087.653005
+43.140000 1088.669493
+43.160000 1089.686445
+43.180000 1090.703859
+43.200000 1091.721736
+43.220000 1092.740076
+43.240000 1093.758878
+43.260000 1094.778142
+43.280000 1095.797870
+43.300000 1096.818060
+43.320000 1097.838712
+43.340000 1098.859828
+43.360000 1099.881405
+43.380000 1100.903446
+43.400000 1101.925949
+43.420000 1102.948915
+43.440000 1103.972343
+43.460000 1104.996234
+43.480000 1106.020587
+43.500000 1107.045403
+43.520000 1108.070682
+43.540000 1109.096424
+43.560000 1110.122628
+43.580000 1111.149294
+43.600000 1112.176424
+43.620000 1113.204016
+43.640000 1114.232070
+43.660000 1115.260587
+43.680000 1116.289567
+43.700000 1117.319009
+43.720000 1118.348914
+43.740000 1119.379282
+43.760000 1120.410112
+43.780000 1121.441405
+43.800000 1122.473161
+43.820000 1123.505379
+43.840000 1124.538060
+43.860000 1125.571203
+43.880000 1126.604809
+43.900000 1127.638878
+43.920000 1128.673409
+43.940000 1129.708403
+43.960000 1130.743859
+43.980000 1131.779778
+44.000000 1132.816160
+44.020000 1133.853004
+44.040000 1134.890311
+44.060000 1135.928081
+44.080000 1136.966313
+44.100000 1138.005008
+44.120000 1139.044165
+44.140000 1140.083785
+44.160000 1141.123868
+44.180000 1142.164413
+44.200000 1143.205421
+44.220000 1144.246892
+44.240000 1145.288825
+44.260000 1146.331221
+44.280000 1147.374079
+44.300000 1148.417400
+44.320000 1149.461184
+44.340000 1150.505430
+44.360000 1151.550139
+44.380000 1152.595311
+44.400000 1153.640945
+44.420000 1154.687041
+44.440000 1155.733601
+44.460000 1156.780623
+44.480000 1157.828108
+44.500000 1158.876055
+44.520000 1159.924465
+44.540000 1160.973337
+44.560000 1162.022672
+44.580000 1163.072470
+44.600000 1164.122730
+44.620000 1165.173453
+44.640000 1166.224639
+44.660000 1167.276287
+44.680000 1168.328398
+44.700000 1169.380972
+44.720000 1170.434008
+44.740000 1171.487506
+44.760000 1172.541468
+44.780000 1173.595892
+44.800000 1174.650778
+44.820000 1175.706127
+44.840000 1176.761939
+44.860000 1177.818214
+44.880000 1178.874951
+44.900000 1179.932150
+44.920000 1180.989813
+44.940000 1182.047938
+44.960000 1183.106525
+44.980000 1184.165575
+45.000000 1185.225088
+45.020000 1186.285064
+45.040000 1187.345502
+45.060000 1188.406402
+45.080000 1189.467766
+45.100000 1190.529592
+45.120000 1191.591880
+45.140000 1192.654631
+45.160000 1193.717845
+45.180000 1194.781521
+45.200000 1195.845660
+45.220000 1196.910262
+45.240000 1197.975326
+45.260000 1199.040853
+45.280000 1200.106843
+45.300000 1201.173295
+45.320000 1202.240210
+45.340000 1203.307587
+45.360000 1204.375427
+45.380000 1205.443730
+45.400000 1206.512495
+45.420000 1207.581723
+45.440000 1208.651413
+45.460000 1209.721566
+45.480000 1210.792182
+45.500000 1211.863260
+45.520000 1212.934801
+45.540000 1214.006805
+45.560000 1215.079271
+45.580000 1216.152200
+45.600000 1217.225591
+45.620000 1218.299445
+45.640000 1219.373762
+45.660000 1220.448541
+45.680000 1221.523783
+45.700000 1222.599488
+45.720000 1223.675655
+45.740000 1224.752285
+45.760000 1225.829377
+45.780000 1226.906932
+45.800000 1227.984950
+45.820000 1229.063430
+45.840000 1230.142373
+45.860000 1231.221779
+45.880000 1232.301647
+45.900000 1233.381978
+45.920000 1234.462771
+45.940000 1235.544027
+45.960000 1236.625746
+45.980000 1237.707927
+46.000000 1238.790571
+46.020000 1239.873677
+46.040000 1240.957246
+46.060000 1242.041278
+46.080000 1243.125773
+46.100000 1244.210730
+46.120000 1245.296149
+46.140000 1246.382031
+46.160000 1247.468376
+46.180000 1248.555184
+46.200000 1249.642454
+46.220000 1250.730187
+46.240000 1251.818382
+46.260000 1252.907040
+46.280000 1253.996160
+46.300000 1255.085744
+46.320000 1256.175789
+46.340000 1257.266298
+46.360000 1258.357269
+46.380000 1259.448703
+46.400000 1260.540599
+46.420000 1261.632958
+46.440000 1262.725779
+46.460000 1263.819064
+46.480000 1264.912810
+46.500000 1266.007020
+46.520000 1267.101692
+46.540000 1268.196827
+46.560000 1269.292424
+46.580000 1270.388484
+46.600000 1271.485006
+46.620000 1272.581991
+46.640000 1273.679439
+46.660000 1274.777350
+46.680000 1275.875723
+46.700000 1276.974558
+46.720000 1278.073857
+46.740000 1279.173617
+46.760000 1280.273841
+46.780000 1281.374527
+46.800000 1282.475676
+46.820000 1283.577287
+46.840000 1284.679361
+46.860000 1285.781898
+46.880000 1286.884897
+46.900000 1287.988359
+46.920000 1289.092283
+46.940000 1290.196670
+46.960000 1291.301520
+46.980000 1292.406833
+47.000000 1293.512608
+47.020000 1294.618845
+47.040000 1295.725545
+47.060000 1296.832708
+47.080000 1297.940334
+47.100000 1299.048422
+47.120000 1300.156972
+47.140000 1301.265986
+47.160000 1302.375462
+47.180000 1303.485400
+47.200000 1304.595801
+47.220000 1305.706665
+47.240000 1306.817992
+47.260000 1307.929781
+47.280000 1309.042032
+47.300000 1310.154747
+47.320000 1311.267924
+47.340000 1312.381563
+47.360000 1313.495665
+47.380000 1314.610230
+47.400000 1315.725257
+47.420000 1316.840747
+47.440000 1317.956700
+47.460000 1319.073115
+47.480000 1320.189993
+47.500000 1321.307334
+47.520000 1322.425137
+47.540000 1323.543403
+47.560000 1324.662131
+47.580000 1325.781322
+47.600000 1326.900976
+47.620000 1328.021092
+47.640000 1329.141671
+47.660000 1330.262712
+47.680000 1331.384216
+47.700000 1332.506183
+47.720000 1333.628612
+47.740000 1334.751504
+47.760000 1335.874859
+47.780000 1336.998676
+47.800000 1338.122956
+47.820000 1339.247698
+47.840000 1340.372903
+47.860000 1341.498571
+47.880000 1342.624701
+47.900000 1343.751294
+47.920000 1344.878350
+47.940000 1346.005868
+47.960000 1347.133849
+47.980000 1348.262292
+48.000000 1349.391198
+48.020000 1350.520567
+48.040000 1351.650398
+48.060000 1352.780692
+48.080000 1353.911449
+48.100000 1355.042668
+48.120000 1356.174350
+48.140000 1357.306494
+48.160000 1358.439101
+48.180000 1359.572171
+48.200000 1360.705703
+48.220000 1361.839698
+48.240000 1362.974156
+48.260000 1364.109076
+48.280000 1365.244458
+48.300000 1366.380304
+48.320000 1367.516612
+48.340000 1368.653382
+48.360000 1369.790616
+48.380000 1370.928311
+48.400000 1372.066470
+48.420000 1373.205091
+48.440000 1374.344175
+48.460000 1375.483721
+48.480000 1376.623730
+48.500000 1377.764202
+48.520000 1378.905136
+48.540000 1380.046533
+48.560000 1381.188392
+48.580000 1382.330714
+48.600000 1383.473499
+48.620000 1384.616746
+48.640000 1385.760456
+48.660000 1386.904629
+48.680000 1388.049264
+48.700000 1389.194362
+48.720000 1390.339922
+48.740000 1391.485945
+48.760000 1392.632431
+48.780000 1393.779379
+48.800000 1394.926790
+48.820000 1396.074664
+48.840000 1397.223000
+48.860000 1398.371799
+48.880000 1399.521060
+48.900000 1400.670784
+48.920000 1401.820971
+48.940000 1402.971620
+48.960000 1404.122732
+48.980000 1405.274306
+49.000000 1406.426344
+49.020000 1407.578843
+49.040000 1408.731806
+49.060000 1409.885231
+49.080000 1411.039118
+49.100000 1412.193469
+49.120000 1413.348281
+49.140000 1414.503557
+49.160000 1415.659295
+49.180000 1416.815496
+49.200000 1417.972159
+49.220000 1419.129285
+49.240000 1420.286874
+49.260000 1421.444925
+49.280000 1422.603439
+49.300000 1423.762415
+49.320000 1424.921854
+49.340000 1426.081756
+49.360000 1427.242120
+49.380000 1428.402947
+49.400000 1429.564237
+49.420000 1430.725989
+49.440000 1431.888204
+49.460000 1433.050881
+49.480000 1434.214021
+49.500000 1435.377624
+49.520000 1436.541689
+49.540000 1437.706217
+49.560000 1438.871208
+49.580000 1440.036661
+49.600000 1441.202577
+49.620000 1442.368955
+49.640000 1443.535796
+49.660000 1444.703100
+49.680000 1445.870866
+49.700000 1447.039095
+49.720000 1448.207786
+49.740000 1449.376940
+49.760000 1450.546557
+49.780000 1451.716637
+49.800000 1452.887179
+49.820000 1454.058183
+49.840000 1455.229650
+49.860000 1456.401580
+49.880000 1457.573973
+49.900000 1458.746828
+49.920000 1459.920146
+49.940000 1461.093926
+49.960000 1462.268169
+49.980000 1463.442875
diff --git a/mrdna/arbdmodel/resources/two_bead_model/BPB.dat b/mrdna/arbdmodel/resources/two_bead_model/BPB.dat
new file mode 100644
index 0000000000000000000000000000000000000000..f7705c141d9d9008f7e36a0394171d1b0b659069
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/BPB.dat
@@ -0,0 +1,2500 @@
+0.000000 29.302686
+0.020000 29.127275
+0.040000 28.952326
+0.060000 28.777841
+0.080000 28.603817
+0.100000 28.430257
+0.120000 28.257159
+0.140000 28.084524
+0.160000 27.912351
+0.180000 27.740641
+0.200000 27.569393
+0.220000 27.398609
+0.240000 27.228286
+0.260000 27.058427
+0.280000 26.889030
+0.300000 26.720096
+0.320000 26.551624
+0.340000 26.383615
+0.360000 26.216068
+0.380000 26.048984
+0.400000 25.882363
+0.420000 25.716205
+0.440000 25.550509
+0.460000 25.385275
+0.480000 25.220505
+0.500000 25.056196
+0.520000 24.892351
+0.540000 24.728968
+0.560000 24.566048
+0.580000 24.403590
+0.600000 24.241595
+0.620000 24.080063
+0.640000 23.918993
+0.660000 23.758386
+0.680000 23.598241
+0.700000 23.438559
+0.720000 23.279340
+0.740000 23.120584
+0.760000 22.962290
+0.780000 22.804458
+0.800000 22.647089
+0.820000 22.490183
+0.840000 22.333740
+0.860000 22.177759
+0.880000 22.022240
+0.900000 21.867185
+0.920000 21.712592
+0.940000 21.558461
+0.960000 21.404793
+0.980000 21.251588
+1.000000 21.098846
+1.020000 20.946566
+1.040000 20.794748
+1.060000 20.643394
+1.080000 20.492502
+1.100000 20.342072
+1.120000 20.192105
+1.140000 20.042601
+1.160000 19.893559
+1.180000 19.744980
+1.200000 19.596864
+1.220000 19.449210
+1.240000 19.302019
+1.260000 19.155291
+1.280000 19.009025
+1.300000 18.863222
+1.320000 18.717881
+1.340000 18.573003
+1.360000 18.428588
+1.380000 18.284635
+1.400000 18.141145
+1.420000 17.998117
+1.440000 17.855552
+1.460000 17.713450
+1.480000 17.571810
+1.500000 17.430633
+1.520000 17.289919
+1.540000 17.149667
+1.560000 17.009878
+1.580000 16.870551
+1.600000 16.731688
+1.620000 16.593286
+1.640000 16.455348
+1.660000 16.317872
+1.680000 16.180858
+1.700000 16.044307
+1.720000 15.908219
+1.740000 15.772593
+1.760000 15.637431
+1.780000 15.502730
+1.800000 15.368493
+1.820000 15.234717
+1.840000 15.101405
+1.860000 14.968555
+1.880000 14.836168
+1.900000 14.704243
+1.920000 14.572781
+1.940000 14.441782
+1.960000 14.311245
+1.980000 14.181171
+2.000000 14.051560
+2.020000 13.922411
+2.040000 13.793725
+2.060000 13.665501
+2.080000 13.537740
+2.100000 13.410442
+2.120000 13.283606
+2.140000 13.157233
+2.160000 13.031322
+2.180000 12.905874
+2.200000 12.780889
+2.220000 12.656366
+2.240000 12.532306
+2.260000 12.408709
+2.280000 12.285574
+2.300000 12.162902
+2.320000 12.040692
+2.340000 11.918945
+2.360000 11.797661
+2.380000 11.676839
+2.400000 11.556480
+2.420000 11.436584
+2.440000 11.317150
+2.460000 11.198179
+2.480000 11.079670
+2.500000 10.961624
+2.520000 10.844041
+2.540000 10.726920
+2.560000 10.610262
+2.580000 10.494067
+2.600000 10.378334
+2.620000 10.263064
+2.640000 10.148256
+2.660000 10.033911
+2.680000 9.920029
+2.700000 9.806609
+2.720000 9.693652
+2.740000 9.581158
+2.760000 9.469126
+2.780000 9.357557
+2.800000 9.246450
+2.820000 9.135806
+2.840000 9.025625
+2.860000 8.915906
+2.880000 8.806650
+2.900000 8.697856
+2.920000 8.589525
+2.940000 8.481657
+2.960000 8.374251
+2.980000 8.267308
+3.000000 8.160828
+3.020000 8.054810
+3.040000 7.949255
+3.060000 7.844162
+3.080000 7.739532
+3.100000 7.635365
+3.120000 7.531661
+3.140000 7.428418
+3.160000 7.325639
+3.180000 7.223322
+3.200000 7.121468
+3.220000 7.020076
+3.240000 6.919148
+3.260000 6.818681
+3.280000 6.718677
+3.300000 6.619136
+3.320000 6.520058
+3.340000 6.421442
+3.360000 6.323289
+3.380000 6.225598
+3.400000 6.128370
+3.420000 6.031605
+3.440000 5.935302
+3.460000 5.839462
+3.480000 5.744085
+3.500000 5.649170
+3.520000 5.554718
+3.540000 5.460728
+3.560000 5.367201
+3.580000 5.274137
+3.600000 5.181535
+3.620000 5.089396
+3.640000 4.997719
+3.660000 4.906505
+3.680000 4.815754
+3.700000 4.725465
+3.720000 4.635639
+3.740000 4.546276
+3.760000 4.457375
+3.780000 4.368937
+3.800000 4.280961
+3.820000 4.193449
+3.840000 4.106398
+3.860000 4.019811
+3.880000 3.933686
+3.900000 3.848023
+3.920000 3.762823
+3.940000 3.678086
+3.960000 3.593812
+3.980000 3.448478
+4.000000 3.349708
+4.020000 3.238916
+4.040000 3.145471
+4.060000 3.045626
+4.080000 2.957114
+4.100000 2.860646
+4.120000 2.749560
+4.140000 2.666180
+4.160000 2.569798
+4.180000 2.476449
+4.200000 2.389389
+4.220000 2.300884
+4.240000 2.211490
+4.260000 2.116828
+4.280000 2.029176
+4.300000 1.938107
+4.320000 1.845007
+4.340000 1.753374
+4.360000 1.664554
+4.380000 1.576795
+4.400000 1.491417
+4.420000 1.408390
+4.440000 1.318279
+4.460000 1.229635
+4.480000 1.143103
+4.500000 1.057327
+4.520000 0.977754
+4.540000 0.900702
+4.560000 0.825436
+4.580000 0.753032
+4.600000 0.684064
+4.620000 0.618678
+4.640000 0.556247
+4.660000 0.497979
+4.680000 0.442390
+4.700000 0.392877
+4.720000 0.347206
+4.740000 0.305611
+4.760000 0.266556
+4.780000 0.231313
+4.800000 0.197414
+4.820000 0.167060
+4.840000 0.138929
+4.860000 0.113140
+4.880000 0.090002
+4.900000 0.069282
+4.920000 0.052430
+4.940000 0.038301
+4.960000 0.026428
+4.980000 0.016649
+5.000000 0.008555
+5.020000 0.003312
+5.040000 0.000438
+5.060000 0.000000
+5.080000 0.001516
+5.100000 0.005962
+5.120000 0.013356
+5.140000 0.022492
+5.160000 0.033894
+5.180000 0.045939
+5.200000 0.059206
+5.220000 0.073462
+5.240000 0.088878
+5.260000 0.105005
+5.280000 0.123043
+5.300000 0.141395
+5.320000 0.160403
+5.340000 0.179894
+5.360000 0.198057
+5.380000 0.215308
+5.400000 0.232463
+5.420000 0.248527
+5.440000 0.263517
+5.460000 0.278254
+5.480000 0.291538
+5.500000 0.304257
+5.520000 0.316529
+5.540000 0.326758
+5.560000 0.336165
+5.580000 0.344027
+5.600000 0.349972
+5.620000 0.355745
+5.640000 0.360864
+5.660000 0.364041
+5.680000 0.366694
+5.700000 0.369196
+5.720000 0.370330
+5.740000 0.371875
+5.760000 0.372255
+5.780000 0.371353
+5.800000 0.369687
+5.820000 0.367710
+5.840000 0.365524
+5.860000 0.364464
+5.880000 0.362561
+5.900000 0.359818
+5.920000 0.358799
+5.940000 0.357018
+5.960000 0.355147
+5.980000 0.354271
+6.000000 0.352661
+6.020000 0.351475
+6.040000 0.352012
+6.060000 0.353348
+6.080000 0.354814
+6.100000 0.356704
+6.120000 0.357555
+6.140000 0.359147
+6.160000 0.362134
+6.180000 0.365087
+6.200000 0.369396
+6.220000 0.374262
+6.240000 0.378742
+6.260000 0.383970
+6.280000 0.390082
+6.300000 0.395646
+6.320000 0.401695
+6.340000 0.408541
+6.360000 0.416743
+6.380000 0.426562
+6.400000 0.437439
+6.420000 0.448806
+6.440000 0.461220
+6.460000 0.475404
+6.480000 0.491695
+6.500000 0.509889
+6.520000 0.530412
+6.540000 0.552946
+6.560000 0.576685
+6.580000 0.604404
+6.600000 0.635248
+6.620000 0.668092
+6.640000 0.704924
+6.660000 0.743375
+6.680000 0.785215
+6.700000 0.829504
+6.720000 0.875655
+6.740000 0.925095
+6.760000 0.980330
+6.780000 1.038871
+6.800000 1.101250
+6.820000 1.169568
+6.840000 1.238870
+6.860000 1.311170
+6.880000 1.388446
+6.900000 1.469000
+6.920000 1.551710
+6.940000 1.637204
+6.960000 1.723887
+6.980000 1.815256
+7.000000 1.904181
+7.020000 1.990407
+7.040000 2.074602
+7.060000 2.157133
+7.080000 2.239766
+7.100000 2.326189
+7.120000 2.408639
+7.140000 2.483578
+7.160000 2.554432
+7.180000 2.625850
+7.200000 2.694450
+7.220000 2.759712
+7.240000 2.817046
+7.260000 2.870283
+7.280000 2.926075
+7.300000 2.979730
+7.320000 3.041518
+7.340000 3.092195
+7.360000 3.141336
+7.380000 3.190302
+7.400000 3.250061
+7.420000 3.345536
+7.440000 3.428697
+7.460000 3.490058
+7.480000 3.573114
+7.500000 3.672148
+7.520000 3.785251
+7.540000 3.981681
+7.560000 4.141234
+7.580000 4.049200
+7.600000 4.141234
+7.620000 4.233732
+7.640000 4.326691
+7.660000 4.420114
+7.680000 4.513999
+7.700000 4.608347
+7.720000 4.703157
+7.740000 4.798430
+7.760000 4.894165
+7.780000 4.990364
+7.800000 5.087024
+7.820000 5.184148
+7.840000 5.281734
+7.860000 5.379782
+7.880000 5.478294
+7.900000 5.577268
+7.920000 5.676704
+7.940000 5.776603
+7.960000 5.876965
+7.980000 5.977790
+8.000000 6.079077
+8.020000 6.180826
+8.040000 6.283038
+8.060000 6.385713
+8.080000 6.488851
+8.100000 6.592451
+8.120000 6.696514
+8.140000 6.801039
+8.160000 6.906027
+8.180000 7.011478
+8.200000 7.117391
+8.220000 7.223767
+8.240000 7.330605
+8.260000 7.437906
+8.280000 7.545670
+8.300000 7.653896
+8.320000 7.762585
+8.340000 7.871737
+8.360000 7.981351
+8.380000 8.091428
+8.400000 8.201967
+8.420000 8.312970
+8.440000 8.424434
+8.460000 8.536362
+8.480000 8.648752
+8.500000 8.761604
+8.520000 8.874919
+8.540000 8.988697
+8.560000 9.102937
+8.580000 9.217641
+8.600000 9.332806
+8.620000 9.448434
+8.640000 9.564525
+8.660000 9.681079
+8.680000 9.798095
+8.700000 9.915574
+8.720000 10.033515
+8.740000 10.151919
+8.760000 10.270786
+8.780000 10.390115
+8.800000 10.509907
+8.820000 10.630162
+8.840000 10.750879
+8.860000 10.872058
+8.880000 10.993701
+8.900000 11.115806
+8.920000 11.238373
+8.940000 11.361404
+8.960000 11.484897
+8.980000 11.608852
+9.000000 11.733270
+9.020000 11.858151
+9.040000 11.983494
+9.060000 12.109300
+9.080000 12.235569
+9.100000 12.362300
+9.120000 12.489494
+9.140000 12.617150
+9.160000 12.745269
+9.180000 12.873851
+9.200000 13.002895
+9.220000 13.132402
+9.240000 13.262372
+9.260000 13.392804
+9.280000 13.523699
+9.300000 13.655056
+9.320000 13.786876
+9.340000 13.919159
+9.360000 14.051904
+9.380000 14.185112
+9.400000 14.318783
+9.420000 14.452916
+9.440000 14.587512
+9.460000 14.722570
+9.480000 14.858091
+9.500000 14.994075
+9.520000 15.130521
+9.540000 15.267430
+9.560000 15.404801
+9.580000 15.542635
+9.600000 15.680932
+9.620000 15.819692
+9.640000 15.958914
+9.660000 16.098598
+9.680000 16.238745
+9.700000 16.379355
+9.720000 16.520428
+9.740000 16.661963
+9.760000 16.803961
+9.780000 16.946421
+9.800000 17.089344
+9.820000 17.232730
+9.840000 17.376578
+9.860000 17.520889
+9.880000 17.665662
+9.900000 17.810898
+9.920000 17.956597
+9.940000 18.102758
+9.960000 18.249382
+9.980000 18.396469
+10.000000 18.544018
+10.020000 18.692030
+10.040000 18.840504
+10.060000 18.989441
+10.080000 19.138841
+10.100000 19.288703
+10.120000 19.439028
+10.140000 19.589816
+10.160000 19.741066
+10.180000 19.892778
+10.200000 20.044954
+10.220000 20.197592
+10.240000 20.350693
+10.260000 20.504256
+10.280000 20.658282
+10.300000 20.812770
+10.320000 20.967721
+10.340000 21.123135
+10.360000 21.279011
+10.380000 21.435350
+10.400000 21.592152
+10.420000 21.749416
+10.440000 21.907143
+10.460000 22.065333
+10.480000 22.223985
+10.500000 22.383100
+10.520000 22.542677
+10.540000 22.702717
+10.560000 22.863219
+10.580000 23.024185
+10.600000 23.185612
+10.620000 23.347503
+10.640000 23.509856
+10.660000 23.672672
+10.680000 23.835950
+10.700000 23.999691
+10.720000 24.163895
+10.740000 24.328561
+10.760000 24.493690
+10.780000 24.659281
+10.800000 24.825335
+10.820000 24.991852
+10.840000 25.158831
+10.860000 25.326273
+10.880000 25.494177
+10.900000 25.662545
+10.920000 25.831374
+10.940000 26.000667
+10.960000 26.170422
+10.980000 26.340639
+11.000000 26.511320
+11.020000 26.682463
+11.040000 26.854068
+11.060000 27.026136
+11.080000 27.198667
+11.100000 27.371660
+11.120000 27.545116
+11.140000 27.719035
+11.160000 27.893416
+11.180000 28.068260
+11.200000 28.243567
+11.220000 28.419336
+11.240000 28.595567
+11.260000 28.772262
+11.280000 28.949419
+11.300000 29.127038
+11.320000 29.305121
+11.340000 29.483665
+11.360000 29.662673
+11.380000 29.842143
+11.400000 30.022076
+11.420000 30.202471
+11.440000 30.383329
+11.460000 30.564650
+11.480000 30.746433
+11.500000 30.928679
+11.520000 31.111387
+11.540000 31.294558
+11.560000 31.478192
+11.580000 31.662288
+11.600000 31.846847
+11.620000 32.031868
+11.640000 32.217353
+11.660000 32.403299
+11.680000 32.589709
+11.700000 32.776581
+11.720000 32.963915
+11.740000 33.151713
+11.760000 33.339973
+11.780000 33.528695
+11.800000 33.717880
+11.820000 33.907528
+11.840000 34.097638
+11.860000 34.288211
+11.880000 34.479247
+11.900000 34.670745
+11.920000 34.862706
+11.940000 35.055130
+11.960000 35.248016
+11.980000 35.441364
+12.000000 35.635176
+12.020000 35.829450
+12.040000 36.024186
+12.060000 36.219386
+12.080000 36.415047
+12.100000 36.611172
+12.120000 36.807759
+12.140000 37.004809
+12.160000 37.202321
+12.180000 37.400296
+12.200000 37.598734
+12.220000 37.797634
+12.240000 37.996997
+12.260000 38.196822
+12.280000 38.397110
+12.300000 38.597861
+12.320000 38.799074
+12.340000 39.000750
+12.360000 39.202889
+12.380000 39.405490
+12.400000 39.608553
+12.420000 39.812080
+12.440000 40.016069
+12.460000 40.220521
+12.480000 40.425435
+12.500000 40.630812
+12.520000 40.836651
+12.540000 41.042953
+12.560000 41.249718
+12.580000 41.456946
+12.600000 41.664636
+12.620000 41.872788
+12.640000 42.081403
+12.660000 42.290481
+12.680000 42.500022
+12.700000 42.710025
+12.720000 42.920491
+12.740000 43.131419
+12.760000 43.342810
+12.780000 43.554664
+12.800000 43.766980
+12.820000 43.979759
+12.840000 44.193000
+12.860000 44.406704
+12.880000 44.620871
+12.900000 44.835500
+12.920000 45.050592
+12.940000 45.266147
+12.960000 45.482164
+12.980000 45.698644
+13.000000 45.915586
+13.020000 46.132991
+13.040000 46.350859
+13.060000 46.569189
+13.080000 46.787982
+13.100000 47.007238
+13.120000 47.226956
+13.140000 47.447137
+13.160000 47.667780
+13.180000 47.888886
+13.200000 48.110455
+13.220000 48.332486
+13.240000 48.554980
+13.260000 48.777936
+13.280000 49.001356
+13.300000 49.225237
+13.320000 49.449582
+13.340000 49.674389
+13.360000 49.899658
+13.380000 50.125391
+13.400000 50.351585
+13.420000 50.578243
+13.440000 50.805363
+13.460000 51.032946
+13.480000 51.260991
+13.500000 51.489499
+13.520000 51.718470
+13.540000 51.947903
+13.560000 52.177799
+13.580000 52.408157
+13.600000 52.638978
+13.620000 52.870262
+13.640000 53.102008
+13.660000 53.334217
+13.680000 53.566889
+13.700000 53.800023
+13.720000 54.033620
+13.740000 54.267679
+13.760000 54.502201
+13.780000 54.737186
+13.800000 54.972633
+13.820000 55.208543
+13.840000 55.444916
+13.860000 55.681751
+13.880000 55.919049
+13.900000 56.156809
+13.920000 56.395032
+13.940000 56.633718
+13.960000 56.872866
+13.980000 57.112477
+14.000000 57.352551
+14.020000 57.593087
+14.040000 57.834085
+14.060000 58.075547
+14.080000 58.317471
+14.100000 58.559858
+14.120000 58.802707
+14.140000 59.046019
+14.160000 59.289793
+14.180000 59.534030
+14.200000 59.778730
+14.220000 60.023892
+14.240000 60.269517
+14.260000 60.515605
+14.280000 60.762155
+14.300000 61.009168
+14.320000 61.256643
+14.340000 61.504582
+14.360000 61.752982
+14.380000 62.001846
+14.400000 62.251172
+14.420000 62.500960
+14.440000 62.751211
+14.460000 63.001925
+14.480000 63.253102
+14.500000 63.504741
+14.520000 63.756842
+14.540000 64.009407
+14.560000 64.262434
+14.580000 64.515923
+14.600000 64.769875
+14.620000 65.024290
+14.640000 65.279167
+14.660000 65.534508
+14.680000 65.790310
+14.700000 66.046575
+14.720000 66.303303
+14.740000 66.560494
+14.760000 66.818147
+14.780000 67.076263
+14.800000 67.334841
+14.820000 67.593882
+14.840000 67.853386
+14.860000 68.113352
+14.880000 68.373781
+14.900000 68.634672
+14.920000 68.896027
+14.940000 69.157843
+14.960000 69.420123
+14.980000 69.682865
+15.000000 69.946069
+15.020000 70.209736
+15.040000 70.473866
+15.060000 70.738459
+15.080000 71.003514
+15.100000 71.269032
+15.120000 71.535012
+15.140000 71.801455
+15.160000 72.068360
+15.180000 72.335729
+15.200000 72.603559
+15.220000 72.871853
+15.240000 73.140609
+15.260000 73.409828
+15.280000 73.679509
+15.300000 73.949653
+15.320000 74.220259
+15.340000 74.491329
+15.360000 74.762860
+15.380000 75.034855
+15.400000 75.307312
+15.420000 75.580232
+15.440000 75.853614
+15.460000 76.127459
+15.480000 76.401766
+15.500000 76.676536
+15.520000 76.951769
+15.540000 77.227465
+15.560000 77.503623
+15.580000 77.780243
+15.600000 78.057326
+15.620000 78.334872
+15.640000 78.612881
+15.660000 78.891352
+15.680000 79.170286
+15.700000 79.449682
+15.720000 79.729541
+15.740000 80.009863
+15.760000 80.290647
+15.780000 80.571894
+15.800000 80.853603
+15.820000 81.135775
+15.840000 81.418410
+15.860000 81.701507
+15.880000 81.985067
+15.900000 82.269090
+15.920000 82.553575
+15.940000 82.838523
+15.960000 83.123933
+15.980000 83.409806
+16.000000 83.696142
+16.020000 83.982940
+16.040000 84.270201
+16.060000 84.557925
+16.080000 84.846111
+16.100000 85.134760
+16.120000 85.423871
+16.140000 85.713445
+16.160000 86.003482
+16.180000 86.293981
+16.200000 86.584943
+16.220000 86.876368
+16.240000 87.168255
+16.260000 87.460605
+16.280000 87.753417
+16.300000 88.046692
+16.320000 88.340430
+16.340000 88.634630
+16.360000 88.929293
+16.380000 89.224418
+16.400000 89.520006
+16.420000 89.816057
+16.440000 90.112570
+16.460000 90.409546
+16.480000 90.706985
+16.500000 91.004886
+16.520000 91.303250
+16.540000 91.602077
+16.560000 91.901366
+16.580000 92.201117
+16.600000 92.501332
+16.620000 92.802009
+16.640000 93.103148
+16.660000 93.404751
+16.680000 93.706815
+16.700000 94.009343
+16.720000 94.312333
+16.740000 94.615786
+16.760000 94.919701
+16.780000 95.224079
+16.800000 95.528919
+16.820000 95.834223
+16.840000 96.139988
+16.860000 96.446217
+16.880000 96.752908
+16.900000 97.060061
+16.920000 97.367678
+16.940000 97.675757
+16.960000 97.984298
+16.980000 98.293302
+17.000000 98.602769
+17.020000 98.912698
+17.040000 99.223090
+17.060000 99.533945
+17.080000 99.845262
+17.100000 100.157042
+17.120000 100.469285
+17.140000 100.781990
+17.160000 101.095158
+17.180000 101.408788
+17.200000 101.722881
+17.220000 102.037437
+17.240000 102.352455
+17.260000 102.667936
+17.280000 102.983879
+17.300000 103.300285
+17.320000 103.617154
+17.340000 103.934485
+17.360000 104.252279
+17.380000 104.570536
+17.400000 104.889255
+17.420000 105.208437
+17.440000 105.528081
+17.460000 105.848188
+17.480000 106.168758
+17.500000 106.489790
+17.520000 106.811285
+17.540000 107.133243
+17.560000 107.455663
+17.580000 107.778546
+17.600000 108.101891
+17.620000 108.425699
+17.640000 108.749970
+17.660000 109.074703
+17.680000 109.399899
+17.700000 109.725558
+17.720000 110.051679
+17.740000 110.378263
+17.760000 110.705309
+17.780000 111.032818
+17.800000 111.360790
+17.820000 111.689224
+17.840000 112.018121
+17.860000 112.347480
+17.880000 112.677302
+17.900000 113.007587
+17.920000 113.338335
+17.940000 113.669545
+17.960000 114.001217
+17.980000 114.333352
+18.000000 114.665950
+18.020000 114.999011
+18.040000 115.332534
+18.060000 115.666520
+18.080000 116.000968
+18.100000 116.335879
+18.120000 116.671252
+18.140000 117.007089
+18.160000 117.343387
+18.180000 117.680149
+18.200000 118.017373
+18.220000 118.355060
+18.240000 118.693209
+18.260000 119.031821
+18.280000 119.370896
+18.300000 119.710433
+18.320000 120.050432
+18.340000 120.390895
+18.360000 120.731820
+18.380000 121.073208
+18.400000 121.415058
+18.420000 121.757371
+18.440000 122.100146
+18.460000 122.443385
+18.480000 122.787085
+18.500000 123.131249
+18.520000 123.475875
+18.540000 123.820963
+18.560000 124.166515
+18.580000 124.512528
+18.600000 124.859005
+18.620000 125.205944
+18.640000 125.553346
+18.660000 125.901210
+18.680000 126.249537
+18.700000 126.598327
+18.720000 126.947579
+18.740000 127.297294
+18.760000 127.647471
+18.780000 127.998112
+18.800000 128.349214
+18.820000 128.700780
+18.840000 129.052808
+18.860000 129.405298
+18.880000 129.758251
+18.900000 130.111667
+18.920000 130.465546
+18.940000 130.819887
+18.960000 131.174690
+18.980000 131.529957
+19.000000 131.885686
+19.020000 132.241877
+19.040000 132.598531
+19.060000 132.955648
+19.080000 133.313228
+19.100000 133.671270
+19.120000 134.029774
+19.140000 134.388742
+19.160000 134.748172
+19.180000 135.108064
+19.200000 135.468419
+19.220000 135.829237
+19.240000 136.190517
+19.260000 136.552260
+19.280000 136.914466
+19.300000 137.277134
+19.320000 137.640265
+19.340000 138.003859
+19.360000 138.367915
+19.380000 138.732434
+19.400000 139.097415
+19.420000 139.462859
+19.440000 139.828766
+19.460000 140.195135
+19.480000 140.561967
+19.500000 140.929261
+19.520000 141.297018
+19.540000 141.665238
+19.560000 142.033920
+19.580000 142.403065
+19.600000 142.772673
+19.620000 143.142743
+19.640000 143.513276
+19.660000 143.884271
+19.680000 144.255729
+19.700000 144.627650
+19.720000 145.000033
+19.740000 145.372879
+19.760000 145.746188
+19.780000 146.119959
+19.800000 146.494193
+19.820000 146.868889
+19.840000 147.244048
+19.860000 147.619670
+19.880000 147.995754
+19.900000 148.372301
+19.920000 148.749311
+19.940000 149.126783
+19.960000 149.504718
+19.980000 149.883115
+20.000000 150.261975
+20.020000 150.641298
+20.040000 151.021083
+20.060000 151.401331
+20.080000 151.782042
+20.100000 152.163215
+20.120000 152.544850
+20.140000 152.926949
+20.160000 153.309510
+20.180000 153.692533
+20.200000 154.076020
+20.220000 154.459968
+20.240000 154.844380
+20.260000 155.229254
+20.280000 155.614591
+20.300000 156.000390
+20.320000 156.386652
+20.340000 156.773377
+20.360000 157.160564
+20.380000 157.548214
+20.400000 157.936326
+20.420000 158.324901
+20.440000 158.713939
+20.460000 159.103439
+20.480000 159.493402
+20.500000 159.883828
+20.520000 160.274716
+20.540000 160.666067
+20.560000 161.057880
+20.580000 161.450156
+20.600000 161.842895
+20.620000 162.236096
+20.640000 162.629760
+20.660000 163.023887
+20.680000 163.418476
+20.700000 163.813528
+20.720000 164.209042
+20.740000 164.605019
+20.760000 165.001459
+20.780000 165.398361
+20.800000 165.795726
+20.820000 166.193553
+20.840000 166.591844
+20.860000 166.990596
+20.880000 167.389812
+20.900000 167.789490
+20.920000 168.189630
+20.940000 168.590233
+20.960000 168.991299
+20.980000 169.392828
+21.000000 169.794819
+21.020000 170.197273
+21.040000 170.600189
+21.060000 171.003568
+21.080000 171.407410
+21.100000 171.811714
+21.120000 172.216481
+21.140000 172.621710
+21.160000 173.027402
+21.180000 173.433557
+21.200000 173.840174
+21.220000 174.247254
+21.240000 174.654797
+21.260000 175.062802
+21.280000 175.471270
+21.300000 175.880200
+21.320000 176.289593
+21.340000 176.699449
+21.360000 177.109767
+21.380000 177.520548
+21.400000 177.931792
+21.420000 178.343498
+21.440000 178.755667
+21.460000 179.168298
+21.480000 179.581392
+21.500000 179.994949
+21.520000 180.408968
+21.540000 180.823450
+21.560000 181.238394
+21.580000 181.653801
+21.600000 182.069671
+21.620000 182.486004
+21.640000 182.902799
+21.660000 183.320056
+21.680000 183.737776
+21.700000 184.155959
+21.720000 184.574605
+21.740000 184.993713
+21.760000 185.413284
+21.780000 185.833317
+21.800000 186.253813
+21.820000 186.674772
+21.840000 187.096193
+21.860000 187.518077
+21.880000 187.940423
+21.900000 188.363232
+21.920000 188.786504
+21.940000 189.210238
+21.960000 189.634435
+21.980000 190.059095
+22.000000 190.484217
+22.020000 190.909802
+22.040000 191.335849
+22.060000 191.762359
+22.080000 192.189332
+22.100000 192.616767
+22.120000 193.044665
+22.140000 193.473026
+22.160000 193.901849
+22.180000 194.331135
+22.200000 194.760883
+22.220000 195.191094
+22.240000 195.621768
+22.260000 196.052904
+22.280000 196.484503
+22.300000 196.916564
+22.320000 197.349088
+22.340000 197.782075
+22.360000 198.215525
+22.380000 198.649437
+22.400000 199.083811
+22.420000 199.518648
+22.440000 199.953948
+22.460000 200.389711
+22.480000 200.825936
+22.500000 201.262624
+22.520000 201.699774
+22.540000 202.137387
+22.560000 202.575463
+22.580000 203.014001
+22.600000 203.453002
+22.620000 203.892465
+22.640000 204.332391
+22.660000 204.772780
+22.680000 205.213631
+22.700000 205.654945
+22.720000 206.096722
+22.740000 206.538961
+22.760000 206.981663
+22.780000 207.424827
+22.800000 207.868454
+22.820000 208.312544
+22.840000 208.757096
+22.860000 209.202111
+22.880000 209.647589
+22.900000 210.093529
+22.920000 210.539932
+22.940000 210.986797
+22.960000 211.434125
+22.980000 211.881916
+23.000000 212.330169
+23.020000 212.778885
+23.040000 213.228063
+23.060000 213.677705
+23.080000 214.127808
+23.100000 214.578375
+23.120000 215.029404
+23.140000 215.480895
+23.160000 215.932850
+23.180000 216.385266
+23.200000 216.838146
+23.220000 217.291488
+23.240000 217.745293
+23.260000 218.199560
+23.280000 218.654290
+23.300000 219.109483
+23.320000 219.565138
+23.340000 220.021256
+23.360000 220.477836
+23.380000 220.934879
+23.400000 221.392385
+23.420000 221.850353
+23.440000 222.308784
+23.460000 222.767678
+23.480000 223.227034
+23.500000 223.686853
+23.520000 224.147134
+23.540000 224.607878
+23.560000 225.069085
+23.580000 225.530754
+23.600000 225.992886
+23.620000 226.455481
+23.640000 226.918538
+23.660000 227.382058
+23.680000 227.846040
+23.700000 228.310485
+23.720000 228.775393
+23.740000 229.240763
+23.760000 229.706596
+23.780000 230.172892
+23.800000 230.639650
+23.820000 231.106870
+23.840000 231.574554
+23.860000 232.042700
+23.880000 232.511308
+23.900000 232.980380
+23.920000 233.449914
+23.940000 233.919910
+23.960000 234.390369
+23.980000 234.861291
+24.000000 235.332675
+24.020000 235.804522
+24.040000 236.276832
+24.060000 236.749604
+24.080000 237.222839
+24.100000 237.696536
+24.120000 238.170696
+24.140000 238.645319
+24.160000 239.120405
+24.180000 239.595952
+24.200000 240.071963
+24.220000 240.548436
+24.240000 241.025372
+24.260000 241.502770
+24.280000 241.980632
+24.300000 242.458955
+24.320000 242.937742
+24.340000 243.416990
+24.360000 243.896702
+24.380000 244.376876
+24.400000 244.857513
+24.420000 245.338612
+24.440000 245.820174
+24.460000 246.302199
+24.480000 246.784686
+24.500000 247.267636
+24.520000 247.751049
+24.540000 248.234924
+24.560000 248.719262
+24.580000 249.204062
+24.600000 249.689325
+24.620000 250.175051
+24.640000 250.661239
+24.660000 251.147890
+24.680000 251.635003
+24.700000 252.122579
+24.720000 252.610618
+24.740000 253.099120
+24.760000 253.588083
+24.780000 254.077510
+24.800000 254.567399
+24.820000 255.057751
+24.840000 255.548566
+24.860000 256.039843
+24.880000 256.531582
+24.900000 257.023785
+24.920000 257.516450
+24.940000 258.009577
+24.960000 258.503167
+24.980000 258.997220
+25.000000 259.491736
+25.020000 259.986714
+25.040000 260.482154
+25.060000 260.978058
+25.080000 261.474424
+25.100000 261.971252
+25.120000 262.468543
+25.140000 262.966297
+25.160000 263.464514
+25.180000 263.963193
+25.200000 264.462334
+25.220000 264.961939
+25.240000 265.462006
+25.260000 265.962535
+25.280000 266.463527
+25.300000 266.964982
+25.320000 267.466899
+25.340000 267.969279
+25.360000 268.472122
+25.380000 268.975427
+25.400000 269.479195
+25.420000 269.983426
+25.440000 270.488119
+25.460000 270.993274
+25.480000 271.498893
+25.500000 272.004974
+25.520000 272.511517
+25.540000 273.018524
+25.560000 273.525992
+25.580000 274.033924
+25.600000 274.542318
+25.620000 275.051175
+25.640000 275.560494
+25.660000 276.070276
+25.680000 276.580521
+25.700000 277.091228
+25.720000 277.602398
+25.740000 278.114030
+25.760000 278.626125
+25.780000 279.138683
+25.800000 279.651703
+25.820000 280.165186
+25.840000 280.679132
+25.860000 281.193540
+25.880000 281.708411
+25.900000 282.223744
+25.920000 282.739540
+25.940000 283.255799
+25.960000 283.772520
+25.980000 284.289704
+26.000000 284.807350
+26.020000 285.325460
+26.040000 285.844031
+26.060000 286.363066
+26.080000 286.882563
+26.100000 287.402522
+26.120000 287.922945
+26.140000 288.443829
+26.160000 288.965177
+26.180000 289.486987
+26.200000 290.009260
+26.220000 290.531995
+26.240000 291.055193
+26.260000 291.578854
+26.280000 292.102977
+26.300000 292.627563
+26.320000 293.152611
+26.340000 293.678122
+26.360000 294.204096
+26.380000 294.730532
+26.400000 295.257431
+26.420000 295.784793
+26.440000 296.312617
+26.460000 296.840904
+26.480000 297.369653
+26.500000 297.898866
+26.520000 298.428540
+26.540000 298.958678
+26.560000 299.489277
+26.580000 300.020340
+26.600000 300.551865
+26.620000 301.083853
+26.640000 301.616303
+26.660000 302.149216
+26.680000 302.682592
+26.700000 303.216430
+26.720000 303.750731
+26.740000 304.285495
+26.760000 304.820721
+26.780000 305.356410
+26.800000 305.892561
+26.820000 306.429175
+26.840000 306.966252
+26.860000 307.503791
+26.880000 308.041793
+26.900000 308.580257
+26.920000 309.119185
+26.940000 309.658574
+26.960000 310.198427
+26.980000 310.738742
+27.000000 311.279519
+27.020000 311.820759
+27.040000 312.362462
+27.060000 312.904628
+27.080000 313.447256
+27.100000 313.990347
+27.120000 314.533900
+27.140000 315.077916
+27.160000 315.622394
+27.180000 316.167336
+27.200000 316.712740
+27.220000 317.258606
+27.240000 317.804935
+27.260000 318.351727
+27.280000 318.898981
+27.300000 319.446698
+27.320000 319.994878
+27.340000 320.543520
+27.360000 321.092624
+27.380000 321.642192
+27.400000 322.192222
+27.420000 322.742715
+27.440000 323.293670
+27.460000 323.845088
+27.480000 324.396968
+27.500000 324.949311
+27.520000 325.502117
+27.540000 326.055386
+27.560000 326.609117
+27.580000 327.163310
+27.600000 327.717967
+27.620000 328.273085
+27.640000 328.828667
+27.660000 329.384711
+27.680000 329.941218
+27.700000 330.498187
+27.720000 331.055619
+27.740000 331.613514
+27.760000 332.171871
+27.780000 332.730691
+27.800000 333.289973
+27.820000 333.849718
+27.840000 334.409926
+27.860000 334.970596
+27.880000 335.531729
+27.900000 336.093325
+27.920000 336.655383
+27.940000 337.217904
+27.960000 337.780888
+27.980000 338.344334
+28.000000 338.908242
+28.020000 339.472614
+28.040000 340.037448
+28.060000 340.602744
+28.080000 341.168503
+28.100000 341.734725
+28.120000 342.301409
+28.140000 342.868557
+28.160000 343.436166
+28.180000 344.004238
+28.200000 344.572773
+28.220000 345.141771
+28.240000 345.711231
+28.260000 346.281154
+28.280000 346.851539
+28.300000 347.422387
+28.320000 347.993698
+28.340000 348.565471
+28.360000 349.137707
+28.380000 349.710406
+28.400000 350.283567
+28.420000 350.857190
+28.440000 351.431277
+28.460000 352.005826
+28.480000 352.580837
+28.500000 353.156312
+28.520000 353.732248
+28.540000 354.308648
+28.560000 354.885510
+28.580000 355.462835
+28.600000 356.040622
+28.620000 356.618872
+28.640000 357.197585
+28.660000 357.776760
+28.680000 358.356398
+28.700000 358.936498
+28.720000 359.517061
+28.740000 360.098087
+28.760000 360.679575
+28.780000 361.261526
+28.800000 361.843940
+28.820000 362.426816
+28.840000 363.010155
+28.860000 363.593956
+28.880000 364.178220
+28.900000 364.762947
+28.920000 365.348136
+28.940000 365.933788
+28.960000 366.519903
+28.980000 367.106480
+29.000000 367.693519
+29.020000 368.281022
+29.040000 368.868987
+29.060000 369.457415
+29.080000 370.046305
+29.100000 370.635658
+29.120000 371.225473
+29.140000 371.815751
+29.160000 372.406492
+29.180000 372.997695
+29.200000 373.589361
+29.220000 374.181490
+29.240000 374.774081
+29.260000 375.367135
+29.280000 375.960652
+29.300000 376.554631
+29.320000 377.149072
+29.340000 377.743977
+29.360000 378.339344
+29.380000 378.935173
+29.400000 379.531466
+29.420000 380.128220
+29.440000 380.725438
+29.460000 381.323118
+29.480000 381.921261
+29.500000 382.519866
+29.520000 383.118934
+29.540000 383.718464
+29.560000 384.318458
+29.580000 384.918913
+29.600000 385.519832
+29.620000 386.121213
+29.640000 386.723057
+29.660000 387.325363
+29.680000 387.928132
+29.700000 388.531363
+29.720000 389.135057
+29.740000 389.739214
+29.760000 390.343834
+29.780000 390.948916
+29.800000 391.554460
+29.820000 392.160468
+29.840000 392.766937
+29.860000 393.373870
+29.880000 393.981265
+29.900000 394.589123
+29.920000 395.197443
+29.940000 395.806226
+29.960000 396.415472
+29.980000 397.025180
+30.000000 397.635351
+30.020000 398.245984
+30.040000 398.857080
+30.060000 399.468639
+30.080000 400.080661
+30.100000 400.693144
+30.120000 401.306091
+30.140000 401.919500
+30.160000 402.533372
+30.180000 403.147707
+30.200000 403.762504
+30.220000 404.377763
+30.240000 404.993486
+30.260000 405.609671
+30.280000 406.226318
+30.300000 406.843428
+30.320000 407.461001
+30.340000 408.079037
+30.360000 408.697535
+30.380000 409.316495
+30.400000 409.935919
+30.420000 410.555805
+30.440000 411.176153
+30.460000 411.796964
+30.480000 412.418238
+30.500000 413.039974
+30.520000 413.662173
+30.540000 414.284835
+30.560000 414.907959
+30.580000 415.531546
+30.600000 416.155596
+30.620000 416.780108
+30.640000 417.405083
+30.660000 418.030520
+30.680000 418.656420
+30.700000 419.282783
+30.720000 419.909608
+30.740000 420.536896
+30.760000 421.164646
+30.780000 421.792859
+30.800000 422.421535
+30.820000 423.050673
+30.840000 423.680274
+30.860000 424.310338
+30.880000 424.940864
+30.900000 425.571853
+30.920000 426.203304
+30.940000 426.835218
+30.960000 427.467595
+30.980000 428.100435
+31.000000 428.733736
+31.020000 429.367501
+31.040000 430.001728
+31.060000 430.636418
+31.080000 431.271570
+31.100000 431.907185
+31.120000 432.543263
+31.140000 433.179803
+31.160000 433.816806
+31.180000 434.454272
+31.200000 435.092200
+31.220000 435.730591
+31.240000 436.369444
+31.260000 437.008760
+31.280000 437.648539
+31.300000 438.288780
+31.320000 438.929484
+31.340000 439.570651
+31.360000 440.212280
+31.380000 440.854371
+31.400000 441.496926
+31.420000 442.139943
+31.440000 442.783422
+31.460000 443.427365
+31.480000 444.071770
+31.500000 444.716637
+31.520000 445.361967
+31.540000 446.007760
+31.560000 446.654015
+31.580000 447.300733
+31.600000 447.947914
+31.620000 448.595557
+31.640000 449.243663
+31.660000 449.892231
+31.680000 450.541262
+31.700000 451.190756
+31.720000 451.840712
+31.740000 452.491131
+31.760000 453.142013
+31.780000 453.793357
+31.800000 454.445164
+31.820000 455.097433
+31.840000 455.750165
+31.860000 456.403360
+31.880000 457.057017
+31.900000 457.711137
+31.920000 458.365720
+31.940000 459.020765
+31.960000 459.676273
+31.980000 460.332243
+32.000000 460.988676
+32.020000 461.645572
+32.040000 462.302930
+32.060000 462.960751
+32.080000 463.619035
+32.100000 464.277781
+32.120000 464.936989
+32.140000 465.596661
+32.160000 466.256795
+32.180000 466.917391
+32.200000 467.578451
+32.220000 468.239973
+32.240000 468.901957
+32.260000 469.564404
+32.280000 470.227314
+32.300000 470.890686
+32.320000 471.554521
+32.340000 472.218819
+32.360000 472.883579
+32.380000 473.548802
+32.400000 474.214487
+32.420000 474.880635
+32.440000 475.547246
+32.460000 476.214319
+32.480000 476.881855
+32.500000 477.549854
+32.520000 478.218315
+32.540000 478.887239
+32.560000 479.556625
+32.580000 480.226474
+32.600000 480.896786
+32.620000 481.567560
+32.640000 482.238797
+32.660000 482.910497
+32.680000 483.582659
+32.700000 484.255284
+32.720000 484.928371
+32.740000 485.601921
+32.760000 486.275934
+32.780000 486.950409
+32.800000 487.625347
+32.820000 488.300748
+32.840000 488.976611
+32.860000 489.652936
+32.880000 490.329725
+32.900000 491.006976
+32.920000 491.684689
+32.940000 492.362866
+32.960000 493.041505
+32.980000 493.720606
+33.000000 494.400170
+33.020000 495.080197
+33.040000 495.760686
+33.060000 496.441638
+33.080000 497.123053
+33.100000 497.804930
+33.120000 498.487270
+33.140000 499.170072
+33.160000 499.853337
+33.180000 500.537065
+33.200000 501.221255
+33.220000 501.905908
+33.240000 502.591024
+33.260000 503.276602
+33.280000 503.962643
+33.300000 504.649146
+33.320000 505.336112
+33.340000 506.023541
+33.360000 506.711432
+33.380000 507.399786
+33.400000 508.088603
+33.420000 508.777882
+33.440000 509.467624
+33.460000 510.157828
+33.480000 510.848495
+33.500000 511.539625
+33.520000 512.231217
+33.540000 512.923272
+33.560000 513.615790
+33.580000 514.308770
+33.600000 515.002213
+33.620000 515.696118
+33.640000 516.390486
+33.660000 517.085317
+33.680000 517.780610
+33.700000 518.476366
+33.720000 519.172584
+33.740000 519.869265
+33.760000 520.566409
+33.780000 521.264015
+33.800000 521.962084
+33.820000 522.660616
+33.840000 523.359610
+33.860000 524.059067
+33.880000 524.758986
+33.900000 525.459369
+33.920000 526.160213
+33.940000 526.861521
+33.960000 527.563290
+33.980000 528.265523
+34.000000 528.968218
+34.020000 529.671376
+34.040000 530.374997
+34.060000 531.079080
+34.080000 531.783625
+34.100000 532.488634
+34.120000 533.194104
+34.140000 533.900038
+34.160000 534.606434
+34.180000 535.313293
+34.200000 536.020614
+34.220000 536.728398
+34.240000 537.436645
+34.260000 538.145354
+34.280000 538.854526
+34.300000 539.564161
+34.320000 540.274258
+34.340000 540.984818
+34.360000 541.695840
+34.380000 542.407325
+34.400000 543.119273
+34.420000 543.831683
+34.440000 544.544556
+34.460000 545.257891
+34.480000 545.971689
+34.500000 546.685950
+34.520000 547.400673
+34.540000 548.115859
+34.560000 548.831508
+34.580000 549.547619
+34.600000 550.264193
+34.620000 550.981230
+34.640000 551.698729
+34.660000 552.416690
+34.680000 553.135115
+34.700000 553.854002
+34.720000 554.573351
+34.740000 555.293163
+34.760000 556.013438
+34.780000 556.734176
+34.800000 557.455376
+34.820000 558.177038
+34.840000 558.899164
+34.860000 559.621752
+34.880000 560.344802
+34.900000 561.068315
+34.920000 561.792291
+34.940000 562.516730
+34.960000 563.241631
+34.980000 563.966994
+35.000000 564.692821
+35.020000 565.419109
+35.040000 566.145861
+35.060000 566.873075
+35.080000 567.600752
+35.100000 568.328891
+35.120000 569.057493
+35.140000 569.786558
+35.160000 570.516085
+35.180000 571.246075
+35.200000 571.976528
+35.220000 572.707443
+35.240000 573.438820
+35.260000 574.170661
+35.280000 574.902964
+35.300000 575.635729
+35.320000 576.368958
+35.340000 577.102648
+35.360000 577.836802
+35.380000 578.571418
+35.400000 579.306497
+35.420000 580.042038
+35.440000 580.778042
+35.460000 581.514509
+35.480000 582.251438
+35.500000 582.988830
+35.520000 583.726684
+35.540000 584.465001
+35.560000 585.203781
+35.580000 585.943023
+35.600000 586.682728
+35.620000 587.422896
+35.640000 588.163526
+35.660000 588.904618
+35.680000 589.646174
+35.700000 590.388192
+35.720000 591.130673
+35.740000 591.873616
+35.760000 592.617022
+35.780000 593.360890
+35.800000 594.105221
+35.820000 594.850015
+35.840000 595.595272
+35.860000 596.340991
+35.880000 597.087172
+35.900000 597.833816
+35.920000 598.580923
+35.940000 599.328493
+35.960000 600.076525
+35.980000 600.825020
+36.000000 601.573977
+36.020000 602.323397
+36.040000 603.073280
+36.060000 603.823625
+36.080000 604.574433
+36.100000 605.325703
+36.120000 606.077436
+36.140000 606.829632
+36.160000 607.582290
+36.180000 608.335411
+36.200000 609.088995
+36.220000 609.843041
+36.240000 610.597550
+36.260000 611.352521
+36.280000 612.107955
+36.300000 612.863852
+36.320000 613.620211
+36.340000 614.377033
+36.360000 615.134318
+36.380000 615.892065
+36.400000 616.650275
+36.420000 617.408947
+36.440000 618.168082
+36.460000 618.927680
+36.480000 619.687740
+36.500000 620.448263
+36.520000 621.209249
+36.540000 621.970697
+36.560000 622.732608
+36.580000 623.494981
+36.600000 624.257817
+36.620000 625.021116
+36.640000 625.784877
+36.660000 626.549101
+36.680000 627.313787
+36.700000 628.078936
+36.720000 628.844548
+36.740000 629.610622
+36.760000 630.377159
+36.780000 631.144159
+36.800000 631.911621
+36.820000 632.679546
+36.840000 633.447934
+36.860000 634.216784
+36.880000 634.986096
+36.900000 635.755872
+36.920000 636.526110
+36.940000 637.296810
+36.960000 638.067973
+36.980000 638.839599
+37.000000 639.611688
+37.020000 640.384239
+37.040000 641.157252
+37.060000 641.930729
+37.080000 642.704668
+37.100000 643.479069
+37.120000 644.253933
+37.140000 645.029260
+37.160000 645.805050
+37.180000 646.581302
+37.200000 647.358016
+37.220000 648.135194
+37.240000 648.912834
+37.260000 649.690936
+37.280000 650.469501
+37.300000 651.248529
+37.320000 652.028019
+37.340000 652.807972
+37.360000 653.588388
+37.380000 654.369266
+37.400000 655.150607
+37.420000 655.932411
+37.440000 656.714677
+37.460000 657.497406
+37.480000 658.280597
+37.500000 659.064251
+37.520000 659.848367
+37.540000 660.632947
+37.560000 661.417989
+37.580000 662.203493
+37.600000 662.989460
+37.620000 663.775890
+37.640000 664.562782
+37.660000 665.350137
+37.680000 666.137955
+37.700000 666.926235
+37.720000 667.714978
+37.740000 668.504183
+37.760000 669.293851
+37.780000 670.083982
+37.800000 670.874575
+37.820000 671.665631
+37.840000 672.457150
+37.860000 673.249131
+37.880000 674.041575
+37.900000 674.834481
+37.920000 675.627850
+37.940000 676.421682
+37.960000 677.215976
+37.980000 678.010733
+38.000000 678.805953
+38.020000 679.601635
+38.040000 680.397780
+38.060000 681.194387
+38.080000 681.991457
+38.100000 682.788990
+38.120000 683.586985
+38.140000 684.385443
+38.160000 685.184363
+38.180000 685.983746
+38.200000 686.783592
+38.220000 687.583900
+38.240000 688.384671
+38.260000 689.185905
+38.280000 689.987601
+38.300000 690.789760
+38.320000 691.592382
+38.340000 692.395466
+38.360000 693.199012
+38.380000 694.003022
+38.400000 694.807494
+38.420000 695.612428
+38.440000 696.417825
+38.460000 697.223685
+38.480000 698.030008
+38.500000 698.836793
+38.520000 699.644041
+38.540000 700.451751
+38.560000 701.259924
+38.580000 702.068559
+38.600000 702.877657
+38.620000 703.687218
+38.640000 704.497242
+38.660000 705.307728
+38.680000 706.118676
+38.700000 706.930088
+38.720000 707.741962
+38.740000 708.554298
+38.760000 709.367097
+38.780000 710.180359
+38.800000 710.994083
+38.820000 711.808270
+38.840000 712.622920
+38.860000 713.438032
+38.880000 714.253607
+38.900000 715.069645
+38.920000 715.886145
+38.940000 716.703108
+38.960000 717.520533
+38.980000 718.338421
+39.000000 719.156772
+39.020000 719.975585
+39.040000 720.794861
+39.060000 721.614599
+39.080000 722.434800
+39.100000 723.255464
+39.120000 724.076590
+39.140000 724.898179
+39.160000 725.720231
+39.180000 726.542745
+39.200000 727.365722
+39.220000 728.189161
+39.240000 729.013063
+39.260000 729.837428
+39.280000 730.662255
+39.300000 731.487545
+39.320000 732.313298
+39.340000 733.139513
+39.360000 733.966191
+39.380000 734.793331
+39.400000 735.620934
+39.420000 736.449000
+39.440000 737.277528
+39.460000 738.106519
+39.480000 738.935973
+39.500000 739.765889
+39.520000 740.596268
+39.540000 741.427109
+39.560000 742.258413
+39.580000 743.090180
+39.600000 743.922409
+39.620000 744.755101
+39.640000 745.588255
+39.660000 746.421873
+39.680000 747.255952
+39.700000 748.090495
+39.720000 748.925500
+39.740000 749.760967
+39.760000 750.596898
+39.780000 751.433290
+39.800000 752.270146
+39.820000 753.107464
+39.840000 753.945245
+39.860000 754.783488
+39.880000 755.622194
+39.900000 756.461363
+39.920000 757.300994
+39.940000 758.141088
+39.960000 758.981644
+39.980000 759.822663
+40.000000 760.664145
+40.020000 761.506089
+40.040000 762.348496
+40.060000 763.191366
+40.080000 764.034698
+40.100000 764.878493
+40.120000 765.722750
+40.140000 766.567470
+40.160000 767.412653
+40.180000 768.258298
+40.200000 769.104406
+40.220000 769.950977
+40.240000 770.798010
+40.260000 771.645505
+40.280000 772.493464
+40.300000 773.341885
+40.320000 774.190769
+40.340000 775.040115
+40.360000 775.889924
+40.380000 776.740195
+40.400000 777.590929
+40.420000 778.442126
+40.440000 779.293785
+40.460000 780.145907
+40.480000 780.998492
+40.500000 781.851539
+40.520000 782.705049
+40.540000 783.559022
+40.560000 784.413457
+40.580000 785.268354
+40.600000 786.123715
+40.620000 786.979538
+40.640000 787.835823
+40.660000 788.692572
+40.680000 789.549782
+40.700000 790.407456
+40.720000 791.265592
+40.740000 792.124191
+40.760000 792.983252
+40.780000 793.842776
+40.800000 794.702762
+40.820000 795.563212
+40.840000 796.424123
+40.860000 797.285498
+40.880000 798.147335
+40.900000 799.009635
+40.920000 799.872397
+40.940000 800.735622
+40.960000 801.599309
+40.980000 802.463459
+41.000000 803.328072
+41.020000 804.193148
+41.040000 805.058686
+41.060000 805.924686
+41.080000 806.791150
+41.100000 807.658075
+41.120000 808.525464
+41.140000 809.393315
+41.160000 810.261629
+41.180000 811.130405
+41.200000 811.999644
+41.220000 812.869346
+41.240000 813.739510
+41.260000 814.610137
+41.280000 815.481226
+41.300000 816.352779
+41.320000 817.224793
+41.340000 818.097271
+41.360000 818.970211
+41.380000 819.843613
+41.400000 820.717478
+41.420000 821.591806
+41.440000 822.466597
+41.460000 823.341850
+41.480000 824.217565
+41.500000 825.093744
+41.520000 825.970385
+41.540000 826.847488
+41.560000 827.725054
+41.580000 828.603083
+41.600000 829.481575
+41.620000 830.360529
+41.640000 831.239945
+41.660000 832.119825
+41.680000 833.000167
+41.700000 833.880971
+41.720000 834.762238
+41.740000 835.643968
+41.760000 836.526161
+41.780000 837.408816
+41.800000 838.291933
+41.820000 839.175513
+41.840000 840.059556
+41.860000 840.944062
+41.880000 841.829030
+41.900000 842.714461
+41.920000 843.600354
+41.940000 844.486710
+41.960000 845.373529
+41.980000 846.260810
+42.000000 847.148554
+42.020000 848.036760
+42.040000 848.925429
+42.060000 849.814561
+42.080000 850.704155
+42.100000 851.594212
+42.120000 852.484732
+42.140000 853.375714
+42.160000 854.267159
+42.180000 855.159067
+42.200000 856.051437
+42.220000 856.944269
+42.240000 857.837565
+42.260000 858.731323
+42.280000 859.625543
+42.300000 860.520226
+42.320000 861.415372
+42.340000 862.310981
+42.360000 863.207052
+42.380000 864.103585
+42.400000 865.000582
+42.420000 865.898041
+42.440000 866.795962
+42.460000 867.694346
+42.480000 868.593193
+42.500000 869.492502
+42.520000 870.392274
+42.540000 871.292509
+42.560000 872.193206
+42.580000 873.094366
+42.600000 873.995989
+42.620000 874.898074
+42.640000 875.800622
+42.660000 876.703632
+42.680000 877.607105
+42.700000 878.511041
+42.720000 879.415439
+42.740000 880.320300
+42.760000 881.225623
+42.780000 882.131409
+42.800000 883.037658
+42.820000 883.944369
+42.840000 884.851543
+42.860000 885.759180
+42.880000 886.667279
+42.900000 887.575841
+42.920000 888.484866
+42.940000 889.394353
+42.960000 890.304302
+42.980000 891.214715
+43.000000 892.125590
+43.020000 893.036927
+43.040000 893.948727
+43.060000 894.860990
+43.080000 895.773716
+43.100000 896.686904
+43.120000 897.600554
+43.140000 898.514668
+43.160000 899.429244
+43.180000 900.344282
+43.200000 901.259783
+43.220000 902.175747
+43.240000 903.092173
+43.260000 904.009062
+43.280000 904.926414
+43.300000 905.844228
+43.320000 906.762505
+43.340000 907.681245
+43.360000 908.600447
+43.380000 909.520112
+43.400000 910.440239
+43.420000 911.360829
+43.440000 912.281882
+43.460000 913.203397
+43.480000 914.125375
+43.500000 915.047815
+43.520000 915.970718
+43.540000 916.894084
+43.560000 917.817912
+43.580000 918.742203
+43.600000 919.666957
+43.620000 920.592173
+43.640000 921.517852
+43.660000 922.443994
+43.680000 923.370598
+43.700000 924.297664
+43.720000 925.225194
+43.740000 926.153186
+43.760000 927.081640
+43.780000 928.010557
+43.800000 928.939937
+43.820000 929.869780
+43.840000 930.800085
+43.860000 931.730852
+43.880000 932.662083
+43.900000 933.593776
+43.920000 934.525931
+43.940000 935.458549
+43.960000 936.391630
+43.980000 937.325174
+44.000000 938.259180
+44.020000 939.193648
+44.040000 940.128579
+44.060000 941.063973
+44.080000 941.999830
+44.100000 942.936149
+44.120000 943.872931
+44.140000 944.810175
+44.160000 945.747882
+44.180000 946.686052
+44.200000 947.624684
+44.220000 948.563779
+44.240000 949.503336
+44.260000 950.443357
+44.280000 951.383839
+44.300000 952.324785
+44.320000 953.266193
+44.340000 954.208063
+44.360000 955.150396
+44.380000 956.093192
+44.400000 957.036451
+44.420000 957.980172
+44.440000 958.924355
+44.460000 959.869002
+44.480000 960.814111
+44.500000 961.759682
+44.520000 962.705717
+44.540000 963.652213
+44.560000 964.599173
+44.580000 965.546595
+44.600000 966.494480
+44.620000 967.442827
+44.640000 968.391637
+44.660000 969.340909
+44.680000 970.290644
+44.700000 971.240842
+44.720000 972.191503
+44.740000 973.142626
+44.760000 974.094211
+44.780000 975.046260
+44.800000 975.998771
+44.820000 976.951744
+44.840000 977.905180
+44.860000 978.859079
+44.880000 979.813440
+44.900000 980.768264
+44.920000 981.723551
+44.940000 982.679300
+44.960000 983.635512
+44.980000 984.592187
+45.000000 985.549324
+45.020000 986.506923
+45.040000 987.464986
+45.060000 988.423511
+45.080000 989.382498
+45.100000 990.341949
+45.120000 991.301861
+45.140000 992.262237
+45.160000 993.223075
+45.180000 994.184376
+45.200000 995.146139
+45.220000 996.108365
+45.240000 997.071054
+45.260000 998.034205
+45.280000 998.997819
+45.300000 999.961895
+45.320000 1000.926434
+45.340000 1001.891436
+45.360000 1002.856900
+45.380000 1003.822827
+45.400000 1004.789217
+45.420000 1005.756069
+45.440000 1006.723383
+45.460000 1007.691161
+45.480000 1008.659401
+45.500000 1009.628104
+45.520000 1010.597269
+45.540000 1011.566897
+45.560000 1012.536987
+45.580000 1013.507540
+45.600000 1014.478556
+45.620000 1015.450035
+45.640000 1016.421976
+45.660000 1017.394379
+45.680000 1018.367245
+45.700000 1019.340574
+45.720000 1020.314366
+45.740000 1021.288620
+45.760000 1022.263337
+45.780000 1023.238516
+45.800000 1024.214158
+45.820000 1025.190263
+45.840000 1026.166830
+45.860000 1027.143860
+45.880000 1028.121352
+45.900000 1029.099307
+45.920000 1030.077725
+45.940000 1031.056605
+45.960000 1032.035948
+45.980000 1033.015754
+46.000000 1033.996022
+46.020000 1034.976753
+46.040000 1035.957946
+46.060000 1036.939602
+46.080000 1037.921721
+46.100000 1038.904302
+46.120000 1039.887346
+46.140000 1040.870853
+46.160000 1041.854822
+46.180000 1042.839254
+46.200000 1043.824148
+46.220000 1044.809505
+46.240000 1045.795325
+46.260000 1046.781607
+46.280000 1047.768352
+46.300000 1048.755560
+46.320000 1049.743230
+46.340000 1050.731362
+46.360000 1051.719958
+46.380000 1052.709016
+46.400000 1053.698536
+46.420000 1054.688520
+46.440000 1055.678966
+46.460000 1056.669874
+46.480000 1057.661245
+46.500000 1058.653079
+46.520000 1059.645375
+46.540000 1060.638134
+46.560000 1061.631356
+46.580000 1062.625040
+46.600000 1063.619187
+46.620000 1064.613796
+46.640000 1065.608869
+46.660000 1066.604403
+46.680000 1067.600401
+46.700000 1068.596861
+46.720000 1069.593783
+46.740000 1070.591168
+46.760000 1071.589016
+46.780000 1072.587327
+46.800000 1073.586100
+46.820000 1074.585335
+46.840000 1075.585034
+46.860000 1076.585195
+46.880000 1077.585818
+46.900000 1078.586904
+46.920000 1079.588453
+46.940000 1080.590465
+46.960000 1081.592939
+46.980000 1082.595875
+47.000000 1083.599275
+47.020000 1084.603136
+47.040000 1085.607461
+47.060000 1086.612248
+47.080000 1087.617498
+47.100000 1088.623210
+47.120000 1089.629385
+47.140000 1090.636023
+47.160000 1091.643123
+47.180000 1092.650686
+47.200000 1093.658712
+47.220000 1094.667200
+47.240000 1095.676150
+47.260000 1096.685564
+47.280000 1097.695440
+47.300000 1098.705778
+47.320000 1099.716580
+47.340000 1100.727843
+47.360000 1101.739570
+47.380000 1102.751759
+47.400000 1103.764411
+47.420000 1104.777525
+47.440000 1105.791102
+47.460000 1106.805142
+47.480000 1107.819644
+47.500000 1108.834609
+47.520000 1109.850036
+47.540000 1110.865926
+47.560000 1111.882279
+47.580000 1112.899094
+47.600000 1113.916372
+47.620000 1114.934113
+47.640000 1115.952316
+47.660000 1116.970982
+47.680000 1117.990110
+47.700000 1119.009701
+47.720000 1120.029755
+47.740000 1121.050271
+47.760000 1122.071250
+47.780000 1123.092691
+47.800000 1124.114596
+47.820000 1125.136962
+47.840000 1126.159792
+47.860000 1127.183084
+47.880000 1128.206838
+47.900000 1129.231056
+47.920000 1130.255735
+47.940000 1131.280878
+47.960000 1132.306483
+47.980000 1133.332551
+48.000000 1134.359081
+48.020000 1135.386074
+48.040000 1136.413530
+48.060000 1137.441448
+48.080000 1138.469829
+48.100000 1139.498672
+48.120000 1140.527978
+48.140000 1141.557747
+48.160000 1142.587978
+48.180000 1143.618672
+48.200000 1144.649829
+48.220000 1145.681448
+48.240000 1146.713530
+48.260000 1147.746074
+48.280000 1148.779082
+48.300000 1149.812551
+48.320000 1150.846484
+48.340000 1151.880878
+48.360000 1152.915736
+48.380000 1153.951056
+48.400000 1154.986839
+48.420000 1156.023084
+48.440000 1157.059792
+48.460000 1158.096963
+48.480000 1159.134596
+48.500000 1160.172692
+48.520000 1161.211251
+48.540000 1162.250272
+48.560000 1163.289756
+48.580000 1164.329702
+48.600000 1165.370111
+48.620000 1166.410983
+48.640000 1167.452317
+48.660000 1168.494114
+48.680000 1169.536373
+48.700000 1170.579096
+48.720000 1171.622280
+48.740000 1172.665928
+48.760000 1173.710038
+48.780000 1174.754610
+48.800000 1175.799646
+48.820000 1176.845143
+48.840000 1177.891104
+48.860000 1178.937527
+48.880000 1179.984413
+48.900000 1181.031761
+48.920000 1182.079572
+48.940000 1183.127846
+48.960000 1184.176582
+48.980000 1185.225781
+49.000000 1186.275442
+49.020000 1187.325566
+49.040000 1188.376153
+49.060000 1189.427202
+49.080000 1190.478714
+49.100000 1191.530689
+49.120000 1192.583126
+49.140000 1193.636026
+49.160000 1194.689388
+49.180000 1195.743213
+49.200000 1196.797501
+49.220000 1197.852251
+49.240000 1198.907464
+49.260000 1199.963139
+49.280000 1201.019278
+49.300000 1202.075878
+49.320000 1203.132942
+49.340000 1204.190468
+49.360000 1205.248456
+49.380000 1206.306908
+49.400000 1207.365822
+49.420000 1208.425198
+49.440000 1209.485037
+49.460000 1210.545339
+49.480000 1211.606103
+49.500000 1212.667330
+49.520000 1213.729020
+49.540000 1214.791172
+49.560000 1215.853787
+49.580000 1216.916864
+49.600000 1217.980405
+49.620000 1219.044407
+49.640000 1220.108873
+49.660000 1221.173801
+49.680000 1222.239191
+49.700000 1223.305044
+49.720000 1224.371360
+49.740000 1225.438139
+49.760000 1226.505380
+49.780000 1227.573083
+49.800000 1228.641250
+49.820000 1229.709879
+49.840000 1230.778970
+49.860000 1231.848524
+49.880000 1232.918541
+49.900000 1233.989021
+49.920000 1235.059963
+49.940000 1236.131367
+49.960000 1237.203235
+49.980000 1238.275565
diff --git a/mrdna/arbdmodel/resources/two_bead_model/BPP.dat b/mrdna/arbdmodel/resources/two_bead_model/BPP.dat
new file mode 100644
index 0000000000000000000000000000000000000000..bd174f4dd843301b9b0e64003296ea81e4af7283
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/BPP.dat
@@ -0,0 +1,2500 @@
+0.000000 26.194708
+0.020000 26.042965
+0.040000 25.891685
+0.060000 25.740867
+0.080000 25.590512
+0.100000 25.440620
+0.120000 25.291190
+0.140000 25.142223
+0.160000 24.993719
+0.180000 24.845677
+0.200000 24.698098
+0.220000 24.550981
+0.240000 24.404327
+0.260000 24.258136
+0.280000 24.112407
+0.300000 23.967141
+0.320000 23.822338
+0.340000 23.677997
+0.360000 23.534119
+0.380000 23.390703
+0.400000 23.247750
+0.420000 23.105260
+0.440000 22.963232
+0.460000 22.821667
+0.480000 22.680564
+0.500000 22.539924
+0.520000 22.399747
+0.540000 22.260033
+0.560000 22.120781
+0.580000 21.981991
+0.600000 21.843664
+0.620000 21.705800
+0.640000 21.568399
+0.660000 21.431460
+0.680000 21.294984
+0.700000 21.158970
+0.720000 21.023419
+0.740000 20.888331
+0.760000 20.753705
+0.780000 20.619542
+0.800000 20.485841
+0.820000 20.352603
+0.840000 20.219828
+0.860000 20.087515
+0.880000 19.955665
+0.900000 19.824278
+0.920000 19.693353
+0.940000 19.562891
+0.960000 19.432891
+0.980000 19.303354
+1.000000 19.174280
+1.020000 19.045668
+1.040000 18.917519
+1.060000 18.789833
+1.080000 18.662609
+1.100000 18.535848
+1.120000 18.409549
+1.140000 18.283713
+1.160000 18.158340
+1.180000 18.033429
+1.200000 17.908981
+1.220000 17.784995
+1.240000 17.661473
+1.260000 17.538412
+1.280000 17.415815
+1.300000 17.293680
+1.320000 17.172007
+1.340000 17.050798
+1.360000 16.930050
+1.380000 16.809766
+1.400000 16.689944
+1.420000 16.570585
+1.440000 16.451688
+1.460000 16.333254
+1.480000 16.215283
+1.500000 16.097774
+1.520000 15.980728
+1.540000 15.864144
+1.560000 15.748023
+1.580000 15.632365
+1.600000 15.517169
+1.620000 15.402436
+1.640000 15.288166
+1.660000 15.174358
+1.680000 15.061013
+1.700000 14.948130
+1.720000 14.835710
+1.740000 14.723753
+1.760000 14.612258
+1.780000 14.501226
+1.800000 14.390657
+1.820000 14.280550
+1.840000 14.170906
+1.860000 14.061724
+1.880000 13.953005
+1.900000 13.844749
+1.920000 13.736955
+1.940000 13.629624
+1.960000 13.522756
+1.980000 13.416350
+2.000000 13.310406
+2.020000 13.204926
+2.040000 13.099908
+2.060000 12.995352
+2.080000 12.891260
+2.100000 12.787630
+2.120000 12.684462
+2.140000 12.581757
+2.160000 12.479515
+2.180000 12.377735
+2.200000 12.276418
+2.220000 12.175564
+2.240000 12.075172
+2.260000 11.975243
+2.280000 11.875776
+2.300000 11.776773
+2.320000 11.678231
+2.340000 11.580153
+2.360000 11.482536
+2.380000 11.385383
+2.400000 11.288692
+2.420000 11.192464
+2.440000 11.096699
+2.460000 11.001396
+2.480000 10.906555
+2.500000 10.812178
+2.520000 10.718262
+2.540000 10.624810
+2.560000 10.531820
+2.580000 10.439293
+2.600000 10.347228
+2.620000 10.255626
+2.640000 10.164487
+2.660000 10.073810
+2.680000 9.983596
+2.700000 9.893845
+2.720000 9.804556
+2.740000 9.715730
+2.760000 9.627366
+2.780000 9.539465
+2.800000 9.452027
+2.820000 9.365051
+2.840000 9.278538
+2.860000 9.192487
+2.880000 9.106899
+2.900000 9.021774
+2.920000 8.937112
+2.940000 8.852912
+2.960000 8.769174
+2.980000 8.685899
+3.000000 8.603087
+3.020000 8.520738
+3.040000 8.438851
+3.060000 8.357426
+3.080000 8.276465
+3.100000 8.195966
+3.120000 8.115929
+3.140000 8.036356
+3.160000 7.957244
+3.180000 7.878596
+3.200000 7.800410
+3.220000 7.722687
+3.240000 7.645426
+3.260000 7.568628
+3.280000 7.492292
+3.300000 7.416420
+3.320000 7.341009
+3.340000 7.266062
+3.360000 7.191577
+3.380000 7.117554
+3.400000 7.043995
+3.420000 6.970898
+3.440000 6.898263
+3.460000 6.826091
+3.480000 6.754382
+3.500000 6.683135
+3.520000 6.612351
+3.540000 6.542030
+3.560000 6.472171
+3.580000 6.402775
+3.600000 6.333842
+3.620000 6.265371
+3.640000 6.197363
+3.660000 6.129817
+3.680000 6.062734
+3.700000 5.996113
+3.720000 5.929956
+3.740000 5.864261
+3.760000 5.799028
+3.780000 5.734258
+3.800000 5.669951
+3.820000 5.606106
+3.840000 5.542724
+3.860000 5.479805
+3.880000 5.417348
+3.900000 5.355354
+3.920000 5.293822
+3.940000 5.232753
+3.960000 5.172147
+3.980000 5.112003
+4.000000 5.052322
+4.020000 4.993104
+4.040000 4.934348
+4.060000 4.876055
+4.080000 4.818224
+4.100000 4.760856
+4.120000 4.703951
+4.140000 4.647508
+4.160000 4.591528
+4.180000 4.536010
+4.200000 4.480956
+4.220000 4.426363
+4.240000 4.372234
+4.260000 4.318567
+4.280000 4.265362
+4.300000 4.212621
+4.320000 4.160342
+4.340000 4.108525
+4.360000 4.057171
+4.380000 4.006280
+4.400000 3.955851
+4.420000 3.905885
+4.440000 3.856382
+4.460000 3.807341
+4.480000 3.758763
+4.500000 3.710647
+4.520000 3.662995
+4.540000 3.615804
+4.560000 3.569077
+4.580000 3.522812
+4.600000 3.477009
+4.620000 3.431669
+4.640000 3.386792
+4.660000 3.309587
+4.680000 3.139466
+4.700000 2.996286
+4.720000 2.873504
+4.740000 2.741883
+4.760000 2.623097
+4.780000 2.508007
+4.800000 2.376832
+4.820000 2.263437
+4.840000 2.157674
+4.860000 2.057887
+4.880000 1.961640
+4.900000 1.862793
+4.920000 1.764559
+4.940000 1.671967
+4.960000 1.585489
+4.980000 1.504348
+5.000000 1.424442
+5.020000 1.348665
+5.040000 1.275134
+5.060000 1.205397
+5.080000 1.135084
+5.100000 1.068383
+5.120000 1.004569
+5.140000 0.945127
+5.160000 0.889644
+5.180000 0.835995
+5.200000 0.786303
+5.220000 0.740259
+5.240000 0.695560
+5.260000 0.651393
+5.280000 0.608627
+5.300000 0.566979
+5.320000 0.527334
+5.340000 0.490642
+5.360000 0.456262
+5.380000 0.423500
+5.400000 0.390851
+5.420000 0.361201
+5.440000 0.334233
+5.460000 0.307135
+5.480000 0.281308
+5.500000 0.258742
+5.520000 0.238260
+5.540000 0.218904
+5.560000 0.201631
+5.580000 0.186322
+5.600000 0.171760
+5.620000 0.157778
+5.640000 0.144087
+5.660000 0.132685
+5.680000 0.122426
+5.700000 0.113057
+5.720000 0.104774
+5.740000 0.096570
+5.760000 0.088021
+5.780000 0.080533
+5.800000 0.073782
+5.820000 0.067604
+5.840000 0.060942
+5.860000 0.055217
+5.880000 0.049655
+5.900000 0.045741
+5.920000 0.040800
+5.940000 0.035229
+5.960000 0.029814
+5.980000 0.024775
+6.000000 0.020909
+6.020000 0.017553
+6.040000 0.013626
+6.060000 0.009969
+6.080000 0.006771
+6.100000 0.004541
+6.120000 0.002471
+6.140000 0.001443
+6.160000 0.000014
+6.180000 0.000000
+6.200000 0.002106
+6.220000 0.005458
+6.240000 0.010425
+6.260000 0.015830
+6.280000 0.022285
+6.300000 0.031317
+6.320000 0.041987
+6.340000 0.054535
+6.360000 0.069041
+6.380000 0.085229
+6.400000 0.103484
+6.420000 0.124778
+6.440000 0.147659
+6.460000 0.171298
+6.480000 0.197944
+6.500000 0.226063
+6.520000 0.256471
+6.540000 0.289570
+6.560000 0.324498
+6.580000 0.361454
+6.600000 0.401319
+6.620000 0.442696
+6.640000 0.487016
+6.660000 0.533136
+6.680000 0.581103
+6.700000 0.633534
+6.720000 0.689272
+6.740000 0.745439
+6.760000 0.804665
+6.780000 0.866191
+6.800000 0.930761
+6.820000 0.998020
+6.840000 1.069291
+6.860000 1.141392
+6.880000 1.216579
+6.900000 1.296094
+6.920000 1.383318
+6.940000 1.471457
+6.960000 1.562365
+6.980000 1.661199
+7.000000 1.766514
+7.020000 1.876445
+7.040000 1.987919
+7.060000 2.104744
+7.080000 2.226802
+7.100000 2.348451
+7.120000 2.468107
+7.140000 2.603890
+7.160000 2.737494
+7.180000 2.872072
+7.200000 3.005475
+7.220000 3.150765
+7.240000 3.284456
+7.260000 3.434976
+7.280000 3.574085
+7.300000 3.713115
+7.320000 3.875864
+7.340000 4.021555
+7.360000 4.198360
+7.380000 4.265793
+7.400000 4.227029
+7.420000 4.265793
+7.440000 4.305019
+7.460000 4.344708
+7.480000 4.384860
+7.500000 4.425474
+7.520000 4.466551
+7.540000 4.508090
+7.560000 4.550092
+7.580000 4.592557
+7.600000 4.635484
+7.620000 4.678874
+7.640000 4.722727
+7.660000 4.767042
+7.680000 4.811820
+7.700000 4.857060
+7.720000 4.902763
+7.740000 4.948929
+7.760000 4.995557
+7.780000 5.042648
+7.800000 5.090202
+7.820000 5.138218
+7.840000 5.186697
+7.860000 5.235638
+7.880000 5.285042
+7.900000 5.334909
+7.920000 5.385238
+7.940000 5.436030
+7.960000 5.487284
+7.980000 5.539001
+8.000000 5.591181
+8.020000 5.643823
+8.040000 5.696928
+8.060000 5.750496
+8.080000 5.804526
+8.100000 5.859019
+8.120000 5.913974
+8.140000 5.969393
+8.160000 6.025273
+8.180000 6.081617
+8.200000 6.138423
+8.220000 6.195691
+8.240000 6.253422
+8.260000 6.311616
+8.280000 6.370273
+8.300000 6.429392
+8.320000 6.488973
+8.340000 6.549018
+8.360000 6.609525
+8.380000 6.670494
+8.400000 6.731926
+8.420000 6.793821
+8.440000 6.856179
+8.460000 6.918999
+8.480000 6.982281
+8.500000 7.046027
+8.520000 7.110234
+8.540000 7.174905
+8.560000 7.240038
+8.580000 7.305634
+8.600000 7.371692
+8.620000 7.438213
+8.640000 7.505197
+8.660000 7.572643
+8.680000 7.640552
+8.700000 7.708924
+8.720000 7.777758
+8.740000 7.847054
+8.760000 7.916814
+8.780000 7.987036
+8.800000 8.057720
+8.820000 8.128868
+8.840000 8.200477
+8.860000 8.272550
+8.880000 8.345085
+8.900000 8.418083
+8.920000 8.491543
+8.940000 8.565466
+8.960000 8.639852
+8.980000 8.714700
+9.000000 8.790011
+9.020000 8.865784
+9.040000 8.942020
+9.060000 9.018719
+9.080000 9.095880
+9.100000 9.173504
+9.120000 9.251591
+9.140000 9.330140
+9.160000 9.409152
+9.180000 9.488626
+9.200000 9.568563
+9.220000 9.648963
+9.240000 9.729825
+9.260000 9.811150
+9.280000 9.892937
+9.300000 9.975188
+9.320000 10.057900
+9.340000 10.141076
+9.360000 10.224714
+9.380000 10.308814
+9.400000 10.393378
+9.420000 10.478403
+9.440000 10.563892
+9.460000 10.649843
+9.480000 10.736257
+9.500000 10.823133
+9.520000 10.910472
+9.540000 10.998274
+9.560000 11.086538
+9.580000 11.175265
+9.600000 11.264454
+9.620000 11.354106
+9.640000 11.444221
+9.660000 11.534798
+9.680000 11.625838
+9.700000 11.717341
+9.720000 11.809306
+9.740000 11.901734
+9.760000 11.994624
+9.780000 12.087978
+9.800000 12.181793
+9.820000 12.276072
+9.840000 12.370812
+9.860000 12.466016
+9.880000 12.561682
+9.900000 12.657811
+9.920000 12.754402
+9.940000 12.851456
+9.960000 12.948973
+9.980000 13.046952
+10.000000 13.145394
+10.020000 13.244299
+10.040000 13.343666
+10.060000 13.443496
+10.080000 13.543788
+10.100000 13.644543
+10.120000 13.745761
+10.140000 13.847441
+10.160000 13.949584
+10.180000 14.052189
+10.200000 14.155258
+10.220000 14.258788
+10.240000 14.362782
+10.260000 14.467238
+10.280000 14.572156
+10.300000 14.677538
+10.320000 14.783381
+10.340000 14.889688
+10.360000 14.996457
+10.380000 15.103689
+10.400000 15.211383
+10.420000 15.319540
+10.440000 15.428160
+10.460000 15.537242
+10.480000 15.646787
+10.500000 15.756794
+10.520000 15.867264
+10.540000 15.978197
+10.560000 16.089592
+10.580000 16.201450
+10.600000 16.313771
+10.620000 16.426554
+10.640000 16.539800
+10.660000 16.653508
+10.680000 16.767679
+10.700000 16.882313
+10.720000 16.997409
+10.740000 17.112968
+10.760000 17.228989
+10.780000 17.345474
+10.800000 17.462420
+10.820000 17.579830
+10.840000 17.697702
+10.860000 17.816036
+10.880000 17.934834
+10.900000 18.054094
+10.920000 18.173816
+10.940000 18.294001
+10.960000 18.414649
+10.980000 18.535759
+11.000000 18.657332
+11.020000 18.779368
+11.040000 18.901866
+11.060000 19.024827
+11.080000 19.148250
+11.100000 19.272137
+11.120000 19.396485
+11.140000 19.521297
+11.160000 19.646571
+11.180000 19.772307
+11.200000 19.898506
+11.220000 20.025168
+11.240000 20.152293
+11.260000 20.279880
+11.280000 20.407929
+11.300000 20.536442
+11.320000 20.665417
+11.340000 20.794854
+11.360000 20.924754
+11.380000 21.055117
+11.400000 21.185943
+11.420000 21.317231
+11.440000 21.448981
+11.460000 21.581195
+11.480000 21.713871
+11.500000 21.847009
+11.520000 21.980610
+11.540000 22.114674
+11.560000 22.249200
+11.580000 22.384189
+11.600000 22.519641
+11.620000 22.655555
+11.640000 22.791932
+11.660000 22.928772
+11.680000 23.066074
+11.700000 23.203839
+11.720000 23.342066
+11.740000 23.480756
+11.760000 23.619909
+11.780000 23.759524
+11.800000 23.899602
+11.820000 24.040142
+11.840000 24.181145
+11.860000 24.322611
+11.880000 24.464539
+11.900000 24.606930
+11.920000 24.749784
+11.940000 24.893100
+11.960000 25.036879
+11.980000 25.181120
+12.000000 25.325824
+12.020000 25.470991
+12.040000 25.616620
+12.060000 25.762712
+12.080000 25.909267
+12.100000 26.056284
+12.120000 26.203764
+12.140000 26.351706
+12.160000 26.500111
+12.180000 26.648979
+12.200000 26.798309
+12.220000 26.948102
+12.240000 27.098358
+12.260000 27.249076
+12.280000 27.400257
+12.300000 27.551900
+12.320000 27.704006
+12.340000 27.856575
+12.360000 28.009606
+12.380000 28.163100
+12.400000 28.317056
+12.420000 28.471476
+12.440000 28.626357
+12.460000 28.781702
+12.480000 28.937509
+12.500000 29.093778
+12.520000 29.250510
+12.540000 29.407705
+12.560000 29.565363
+12.580000 29.723483
+12.600000 29.882066
+12.620000 30.041111
+12.640000 30.200619
+12.660000 30.360590
+12.680000 30.521023
+12.700000 30.681919
+12.720000 30.843277
+12.740000 31.005098
+12.760000 31.167382
+12.780000 31.330128
+12.800000 31.493337
+12.820000 31.657009
+12.840000 31.821143
+12.860000 31.985740
+12.880000 32.150799
+12.900000 32.316321
+12.920000 32.482306
+12.940000 32.648753
+12.960000 32.815663
+12.980000 32.983036
+13.000000 33.150871
+13.020000 33.319168
+13.040000 33.487929
+13.060000 33.657152
+13.080000 33.826838
+13.100000 33.996986
+13.120000 34.167597
+13.140000 34.338670
+13.160000 34.510206
+13.180000 34.682205
+13.200000 34.854666
+13.220000 35.027590
+13.240000 35.200977
+13.260000 35.374826
+13.280000 35.549138
+13.300000 35.723913
+13.320000 35.899150
+13.340000 36.074849
+13.360000 36.251012
+13.380000 36.427637
+13.400000 36.604724
+13.420000 36.782275
+13.440000 36.960287
+13.460000 37.138763
+13.480000 37.317701
+13.500000 37.497102
+13.520000 37.676965
+13.540000 37.857291
+13.560000 38.038079
+13.580000 38.219331
+13.600000 38.401044
+13.620000 38.583221
+13.640000 38.765860
+13.660000 38.948962
+13.680000 39.132526
+13.700000 39.316553
+13.720000 39.501042
+13.740000 39.685995
+13.760000 39.871409
+13.780000 40.057287
+13.800000 40.243627
+13.820000 40.430429
+13.840000 40.617695
+13.860000 40.805423
+13.880000 40.993613
+13.900000 41.182266
+13.920000 41.371382
+13.940000 41.560960
+13.960000 41.751001
+13.980000 41.941505
+14.000000 42.132471
+14.020000 42.323900
+14.040000 42.515791
+14.060000 42.708146
+14.080000 42.900962
+14.100000 43.094242
+14.120000 43.287984
+14.140000 43.482188
+14.160000 43.676855
+14.180000 43.871985
+14.200000 44.067578
+14.220000 44.263633
+14.240000 44.460151
+14.260000 44.657131
+14.280000 44.854574
+14.300000 45.052479
+14.320000 45.250848
+14.340000 45.449678
+14.360000 45.648972
+14.380000 45.848728
+14.400000 46.048947
+14.420000 46.249628
+14.440000 46.450772
+14.460000 46.652378
+14.480000 46.854447
+14.500000 47.056979
+14.520000 47.259974
+14.540000 47.463431
+14.560000 47.667350
+14.580000 47.871733
+14.600000 48.076577
+14.620000 48.281885
+14.640000 48.487655
+14.660000 48.693888
+14.680000 48.900583
+14.700000 49.107741
+14.720000 49.315362
+14.740000 49.523445
+14.760000 49.731991
+14.780000 49.940999
+14.800000 50.150471
+14.820000 50.360404
+14.840000 50.570801
+14.860000 50.781660
+14.880000 50.992981
+14.900000 51.204765
+14.920000 51.417012
+14.940000 51.629722
+14.960000 51.842894
+14.980000 52.056528
+15.000000 52.270626
+15.020000 52.485186
+15.040000 52.700208
+15.060000 52.915694
+15.080000 53.131641
+15.100000 53.348052
+15.120000 53.564925
+15.140000 53.782260
+15.160000 54.000059
+15.180000 54.218320
+15.200000 54.437043
+15.220000 54.656229
+15.240000 54.875878
+15.260000 55.095990
+15.280000 55.316564
+15.300000 55.537600
+15.320000 55.759100
+15.340000 55.981061
+15.360000 56.203486
+15.380000 56.426373
+15.400000 56.649723
+15.420000 56.873535
+15.440000 57.097810
+15.460000 57.322548
+15.480000 57.547748
+15.500000 57.773411
+15.520000 57.999536
+15.540000 58.226125
+15.560000 58.453175
+15.580000 58.680689
+15.600000 58.908665
+15.620000 59.137103
+15.640000 59.366004
+15.660000 59.595368
+15.680000 59.825195
+15.700000 60.055484
+15.720000 60.286236
+15.740000 60.517450
+15.760000 60.749127
+15.780000 60.981266
+15.800000 61.213869
+15.820000 61.446933
+15.840000 61.680461
+15.860000 61.914451
+15.880000 62.148904
+15.900000 62.383819
+15.920000 62.619197
+15.940000 62.855037
+15.960000 63.091340
+15.980000 63.328106
+16.000000 63.565335
+16.020000 63.803026
+16.040000 64.041179
+16.060000 64.279796
+16.080000 64.518874
+16.100000 64.758416
+16.120000 64.998420
+16.140000 65.238887
+16.160000 65.479816
+16.180000 65.721208
+16.200000 65.963063
+16.220000 66.205380
+16.240000 66.448160
+16.260000 66.691403
+16.280000 66.935108
+16.300000 67.179275
+16.320000 67.423906
+16.340000 67.668999
+16.360000 67.914554
+16.380000 68.160573
+16.400000 68.407053
+16.420000 68.653997
+16.440000 68.901403
+16.460000 69.149272
+16.480000 69.397603
+16.500000 69.646397
+16.520000 69.895653
+16.540000 70.145373
+16.560000 70.395554
+16.580000 70.646199
+16.600000 70.897306
+16.620000 71.148876
+16.640000 71.400908
+16.660000 71.653403
+16.680000 71.906360
+16.700000 72.159781
+16.720000 72.413663
+16.740000 72.668009
+16.760000 72.922817
+16.780000 73.178087
+16.800000 73.433821
+16.820000 73.690017
+16.840000 73.946675
+16.860000 74.203796
+16.880000 74.461380
+16.900000 74.719426
+16.920000 74.977935
+16.940000 75.236907
+16.960000 75.496341
+16.980000 75.756238
+17.000000 76.016598
+17.020000 76.277420
+17.040000 76.538705
+17.060000 76.800452
+17.080000 77.062662
+17.100000 77.325334
+17.120000 77.588470
+17.140000 77.852068
+17.160000 78.116128
+17.180000 78.380651
+17.200000 78.645637
+17.220000 78.911085
+17.240000 79.176996
+17.260000 79.443370
+17.280000 79.710206
+17.300000 79.977505
+17.320000 80.245266
+17.340000 80.513490
+17.360000 80.782177
+17.380000 81.051326
+17.400000 81.320938
+17.420000 81.591013
+17.440000 81.861550
+17.460000 82.132550
+17.480000 82.404012
+17.500000 82.675937
+17.520000 82.948325
+17.540000 83.221175
+17.560000 83.494488
+17.580000 83.768263
+17.600000 84.042502
+17.620000 84.317202
+17.640000 84.592366
+17.660000 84.867992
+17.680000 85.144080
+17.700000 85.420632
+17.720000 85.697645
+17.740000 85.975122
+17.760000 86.253061
+17.780000 86.531463
+17.800000 86.810327
+17.820000 87.089654
+17.840000 87.369444
+17.860000 87.649696
+17.880000 87.930411
+17.900000 88.211588
+17.920000 88.493228
+17.940000 88.775331
+17.960000 89.057896
+17.980000 89.340924
+18.000000 89.624415
+18.020000 89.908368
+18.040000 90.192784
+18.060000 90.477662
+18.080000 90.763003
+18.100000 91.048807
+18.120000 91.335073
+18.140000 91.621802
+18.160000 91.908994
+18.180000 92.196648
+18.200000 92.484765
+18.220000 92.773344
+18.240000 93.062386
+18.260000 93.351891
+18.280000 93.641858
+18.300000 93.932288
+18.320000 94.223181
+18.340000 94.514536
+18.360000 94.806354
+18.380000 95.098634
+18.400000 95.391377
+18.420000 95.684583
+18.440000 95.978251
+18.460000 96.272382
+18.480000 96.566975
+18.500000 96.862031
+18.520000 97.157550
+18.540000 97.453531
+18.560000 97.749975
+18.580000 98.046882
+18.600000 98.344251
+18.620000 98.642083
+18.640000 98.940378
+18.660000 99.239135
+18.680000 99.538354
+18.700000 99.838037
+18.720000 100.138182
+18.740000 100.438789
+18.760000 100.739859
+18.780000 101.041392
+18.800000 101.343388
+18.820000 101.645846
+18.840000 101.948766
+18.860000 102.252150
+18.880000 102.555996
+18.900000 102.860304
+18.920000 103.165075
+18.940000 103.470309
+18.960000 103.776006
+18.980000 104.082165
+19.000000 104.388786
+19.020000 104.695871
+19.040000 105.003417
+19.060000 105.311427
+19.080000 105.619899
+19.100000 105.928834
+19.120000 106.238231
+19.140000 106.548091
+19.160000 106.858414
+19.180000 107.169199
+19.200000 107.480447
+19.220000 107.792158
+19.240000 108.104331
+19.260000 108.416966
+19.280000 108.730065
+19.300000 109.043626
+19.320000 109.357649
+19.340000 109.672136
+19.360000 109.987084
+19.380000 110.302496
+19.400000 110.618370
+19.420000 110.934707
+19.440000 111.251506
+19.460000 111.568768
+19.480000 111.886493
+19.500000 112.204680
+19.520000 112.523330
+19.540000 112.842442
+19.560000 113.162017
+19.580000 113.482055
+19.600000 113.802555
+19.620000 114.123518
+19.640000 114.444944
+19.660000 114.766832
+19.680000 115.089183
+19.700000 115.411996
+19.720000 115.735272
+19.740000 116.059011
+19.760000 116.383212
+19.780000 116.707876
+19.800000 117.033002
+19.820000 117.358592
+19.840000 117.684643
+19.860000 118.011158
+19.880000 118.338135
+19.900000 118.665574
+19.920000 118.993477
+19.940000 119.321842
+19.960000 119.650669
+19.980000 119.979959
+20.000000 120.309712
+20.020000 120.639927
+20.040000 120.970605
+20.060000 121.301746
+20.080000 121.633349
+20.100000 121.965415
+20.120000 122.297943
+20.140000 122.630934
+20.160000 122.964388
+20.180000 123.298305
+20.200000 123.632683
+20.220000 123.967525
+20.240000 124.302829
+20.260000 124.638596
+20.280000 124.974826
+20.300000 125.311518
+20.320000 125.648672
+20.340000 125.986290
+20.360000 126.324370
+20.380000 126.662912
+20.400000 127.001917
+20.420000 127.341385
+20.440000 127.681315
+20.460000 128.021709
+20.480000 128.362564
+20.500000 128.703882
+20.520000 129.045663
+20.540000 129.387907
+20.560000 129.730613
+20.580000 130.073782
+20.600000 130.417413
+20.620000 130.761507
+20.640000 131.106064
+20.660000 131.451083
+20.680000 131.796565
+20.700000 132.142510
+20.720000 132.488917
+20.740000 132.835786
+20.760000 133.183119
+20.780000 133.530914
+20.800000 133.879171
+20.820000 134.227892
+20.840000 134.577074
+20.860000 134.926720
+20.880000 135.276828
+20.900000 135.627399
+20.920000 135.978432
+20.940000 136.329928
+20.960000 136.681887
+20.980000 137.034308
+21.000000 137.387192
+21.020000 137.740538
+21.040000 138.094347
+21.060000 138.448619
+21.080000 138.803353
+21.100000 139.158550
+21.120000 139.514210
+21.140000 139.870332
+21.160000 140.226917
+21.180000 140.583964
+21.200000 140.941474
+21.220000 141.299447
+21.240000 141.657882
+21.260000 142.016780
+21.280000 142.376140
+21.300000 142.735964
+21.320000 143.096249
+21.340000 143.456998
+21.360000 143.818209
+21.380000 144.179882
+21.400000 144.542019
+21.420000 144.904618
+21.440000 145.267679
+21.460000 145.631203
+21.480000 145.995190
+21.500000 146.359639
+21.520000 146.724551
+21.540000 147.089926
+21.560000 147.455763
+21.580000 147.822063
+21.600000 148.188825
+21.620000 148.556051
+21.640000 148.923738
+21.660000 149.291889
+21.680000 149.660502
+21.700000 150.029577
+21.720000 150.399115
+21.740000 150.769116
+21.760000 151.139580
+21.780000 151.510506
+21.800000 151.881894
+21.820000 152.253746
+21.840000 152.626060
+21.860000 152.998836
+21.880000 153.372075
+21.900000 153.745777
+21.920000 154.119942
+21.940000 154.494569
+21.960000 154.869658
+21.980000 155.245211
+22.000000 155.621226
+22.020000 155.997703
+22.040000 156.374643
+22.060000 156.752046
+22.080000 157.129911
+22.100000 157.508239
+22.120000 157.887030
+22.140000 158.266283
+22.160000 158.645999
+22.180000 159.026178
+22.200000 159.406819
+22.220000 159.787923
+22.240000 160.169489
+22.260000 160.551518
+22.280000 160.934010
+22.300000 161.316964
+22.320000 161.700381
+22.340000 162.084260
+22.360000 162.468602
+22.380000 162.853407
+22.400000 163.238674
+22.420000 163.624404
+22.440000 164.010597
+22.460000 164.397252
+22.480000 164.784370
+22.500000 165.171950
+22.520000 165.559993
+22.540000 165.948499
+22.560000 166.337467
+22.580000 166.726898
+22.600000 167.116792
+22.620000 167.507148
+22.640000 167.897967
+22.660000 168.289248
+22.680000 168.680992
+22.700000 169.073199
+22.720000 169.465868
+22.740000 169.859000
+22.760000 170.252595
+22.780000 170.646652
+22.800000 171.041172
+22.820000 171.436154
+22.840000 171.831599
+22.860000 172.227507
+22.880000 172.623877
+22.900000 173.020710
+22.920000 173.418005
+22.940000 173.815764
+22.960000 174.213984
+22.980000 174.612668
+23.000000 175.011814
+23.020000 175.411422
+23.040000 175.811494
+23.060000 176.212027
+23.080000 176.613024
+23.100000 177.014483
+23.120000 177.416405
+23.140000 177.818789
+23.160000 178.221636
+23.180000 178.624946
+23.200000 179.028718
+23.220000 179.432953
+23.240000 179.837650
+23.260000 180.242810
+23.280000 180.648433
+23.300000 181.054518
+23.320000 181.461066
+23.340000 181.868077
+23.360000 182.275550
+23.380000 182.683486
+23.400000 183.091884
+23.420000 183.500745
+23.440000 183.910069
+23.460000 184.319855
+23.480000 184.730104
+23.500000 185.140816
+23.520000 185.551990
+23.540000 185.963627
+23.560000 186.375726
+23.580000 186.788288
+23.600000 187.201313
+23.620000 187.614800
+23.640000 188.028750
+23.660000 188.443162
+23.680000 188.858037
+23.700000 189.273375
+23.720000 189.689175
+23.740000 190.105438
+23.760000 190.522164
+23.780000 190.939352
+23.800000 191.357003
+23.820000 191.775117
+23.840000 192.193693
+23.860000 192.612732
+23.880000 193.032233
+23.900000 193.452197
+23.920000 193.872623
+23.940000 194.293513
+23.960000 194.714864
+23.980000 195.136679
+24.000000 195.558956
+24.020000 195.981696
+24.040000 196.404898
+24.060000 196.828563
+24.080000 197.252691
+24.100000 197.677281
+24.120000 198.102334
+24.140000 198.527849
+24.160000 198.953827
+24.180000 199.380268
+24.200000 199.807171
+24.220000 200.234537
+24.240000 200.662365
+24.260000 201.090657
+24.280000 201.519410
+24.300000 201.948627
+24.320000 202.378306
+24.340000 202.808447
+24.360000 203.239052
+24.380000 203.670119
+24.400000 204.101648
+24.420000 204.533640
+24.440000 204.966095
+24.460000 205.399012
+24.480000 205.832392
+24.500000 206.266235
+24.520000 206.700540
+24.540000 207.135308
+24.560000 207.570539
+24.580000 208.006232
+24.600000 208.442387
+24.620000 208.879006
+24.640000 209.316087
+24.660000 209.753630
+24.680000 210.191637
+24.700000 210.630105
+24.720000 211.069037
+24.740000 211.508431
+24.760000 211.948288
+24.780000 212.388607
+24.800000 212.829389
+24.820000 213.270633
+24.840000 213.712341
+24.860000 214.154510
+24.880000 214.597143
+24.900000 215.040238
+24.920000 215.483796
+24.940000 215.927816
+24.960000 216.372299
+24.980000 216.817244
+25.000000 217.262653
+25.020000 217.708523
+25.040000 218.154857
+25.060000 218.601653
+25.080000 219.048911
+25.100000 219.496633
+25.120000 219.944817
+25.140000 220.393463
+25.160000 220.842572
+25.180000 221.292144
+25.200000 221.742178
+25.220000 222.192675
+25.240000 222.643635
+25.260000 223.095057
+25.280000 223.546942
+25.300000 223.999290
+25.320000 224.452100
+25.340000 224.905372
+25.360000 225.359108
+25.380000 225.813306
+25.400000 226.267966
+25.420000 226.723089
+25.440000 227.178675
+25.460000 227.634724
+25.480000 228.091235
+25.500000 228.548209
+25.520000 229.005645
+25.540000 229.463544
+25.560000 229.921905
+25.580000 230.380730
+25.600000 230.840016
+25.620000 231.299766
+25.640000 231.759978
+25.660000 232.220653
+25.680000 232.681790
+25.700000 233.143390
+25.720000 233.605452
+25.740000 234.067977
+25.760000 234.530965
+25.780000 234.994416
+25.800000 235.458329
+25.820000 235.922704
+25.840000 236.387543
+25.860000 236.852844
+25.880000 237.318607
+25.900000 237.784833
+25.920000 238.251522
+25.940000 238.718673
+25.960000 239.186287
+25.980000 239.654364
+26.000000 240.122903
+26.020000 240.591905
+26.040000 241.061370
+26.060000 241.531297
+26.080000 242.001686
+26.100000 242.472539
+26.120000 242.943854
+26.140000 243.415631
+26.160000 243.887872
+26.180000 244.360574
+26.200000 244.833740
+26.220000 245.307368
+26.240000 245.781459
+26.260000 246.256012
+26.280000 246.731028
+26.300000 247.206506
+26.320000 247.682448
+26.340000 248.158851
+26.360000 248.635718
+26.380000 249.113047
+26.400000 249.590839
+26.420000 250.069093
+26.440000 250.547810
+26.460000 251.026989
+26.480000 251.506632
+26.500000 251.986736
+26.520000 252.467304
+26.540000 252.948334
+26.560000 253.429826
+26.580000 253.911782
+26.600000 254.394200
+26.620000 254.877080
+26.640000 255.360423
+26.660000 255.844229
+26.680000 256.328497
+26.700000 256.813228
+26.720000 257.298422
+26.740000 257.784078
+26.760000 258.270197
+26.780000 258.756779
+26.800000 259.243823
+26.820000 259.731329
+26.840000 260.219299
+26.860000 260.707731
+26.880000 261.196625
+26.900000 261.685983
+26.920000 262.175802
+26.940000 262.666085
+26.960000 263.156830
+26.980000 263.648038
+27.000000 264.139708
+27.020000 264.631841
+27.040000 265.124437
+27.060000 265.617495
+27.080000 266.111016
+27.100000 266.604999
+27.120000 267.099445
+27.140000 267.594354
+27.160000 268.089725
+27.180000 268.585559
+27.200000 269.081856
+27.220000 269.578615
+27.240000 270.075836
+27.260000 270.573521
+27.280000 271.071668
+27.300000 271.570278
+27.320000 272.069350
+27.340000 272.568885
+27.360000 273.068882
+27.380000 273.569342
+27.400000 274.070265
+27.420000 274.571651
+27.440000 275.073499
+27.460000 275.575809
+27.480000 276.078582
+27.500000 276.581818
+27.520000 277.085517
+27.540000 277.589678
+27.560000 278.094302
+27.580000 278.599388
+27.600000 279.104937
+27.620000 279.610949
+27.640000 280.117423
+27.660000 280.624360
+27.680000 281.131759
+27.700000 281.639621
+27.720000 282.147946
+27.740000 282.656733
+27.760000 283.165983
+27.780000 283.675696
+27.800000 284.185871
+27.820000 284.696509
+27.840000 285.207609
+27.860000 285.719172
+27.880000 286.231198
+27.900000 286.743686
+27.920000 287.256637
+27.940000 287.770051
+27.960000 288.283927
+27.980000 288.798266
+28.000000 289.313067
+28.020000 289.828331
+28.040000 290.344058
+28.060000 290.860247
+28.080000 291.376899
+28.100000 291.894013
+28.120000 292.411591
+28.140000 292.929630
+28.160000 293.448133
+28.180000 293.967098
+28.200000 294.486525
+28.220000 295.006416
+28.240000 295.526769
+28.260000 296.047584
+28.280000 296.568862
+28.300000 297.090603
+28.320000 297.612806
+28.340000 298.135472
+28.360000 298.658601
+28.380000 299.182192
+28.400000 299.706246
+28.420000 300.230762
+28.440000 300.755741
+28.460000 301.281183
+28.480000 301.807087
+28.500000 302.333454
+28.520000 302.860284
+28.540000 303.387576
+28.560000 303.915331
+28.580000 304.443548
+28.600000 304.972229
+28.620000 305.501371
+28.640000 306.030977
+28.660000 306.561044
+28.680000 307.091575
+28.700000 307.622568
+28.720000 308.154024
+28.740000 308.685942
+28.760000 309.218323
+28.780000 309.751167
+28.800000 310.284473
+28.820000 310.818242
+28.840000 311.352474
+28.860000 311.887168
+28.880000 312.422325
+28.900000 312.957944
+28.920000 313.494026
+28.940000 314.030571
+28.960000 314.567578
+28.980000 315.105048
+29.000000 315.642980
+29.020000 316.181375
+29.040000 316.720233
+29.060000 317.259554
+29.080000 317.799337
+29.100000 318.339582
+29.120000 318.880290
+29.140000 319.421461
+29.160000 319.963095
+29.180000 320.505191
+29.200000 321.047749
+29.220000 321.590771
+29.240000 322.134255
+29.260000 322.678201
+29.280000 323.222611
+29.300000 323.767482
+29.320000 324.312817
+29.340000 324.858614
+29.360000 325.404874
+29.380000 325.951596
+29.400000 326.498781
+29.420000 327.046428
+29.440000 327.594538
+29.460000 328.143111
+29.480000 328.692147
+29.500000 329.241645
+29.520000 329.791605
+29.540000 330.342029
+29.560000 330.892915
+29.580000 331.444263
+29.600000 331.996074
+29.620000 332.548348
+29.640000 333.101084
+29.660000 333.654283
+29.680000 334.207945
+29.700000 334.762069
+29.720000 335.316656
+29.740000 335.871706
+29.760000 336.427218
+29.780000 336.983193
+29.800000 337.539630
+29.820000 338.096530
+29.840000 338.653892
+29.860000 339.211718
+29.880000 339.770006
+29.900000 340.328756
+29.920000 340.887969
+29.940000 341.447645
+29.960000 342.007783
+29.980000 342.568384
+30.000000 343.129448
+30.020000 343.690974
+30.040000 344.252963
+30.060000 344.815414
+30.080000 345.378328
+30.100000 345.941705
+30.120000 346.505544
+30.140000 347.069846
+30.160000 347.634611
+30.180000 348.199838
+30.200000 348.765528
+30.220000 349.331680
+30.240000 349.898295
+30.260000 350.465373
+30.280000 351.032913
+30.300000 351.600916
+30.320000 352.169382
+30.340000 352.738310
+30.360000 353.307700
+30.380000 353.877554
+30.400000 354.447870
+30.420000 355.018648
+30.440000 355.589890
+30.460000 356.161594
+30.480000 356.733760
+30.500000 357.306389
+30.520000 357.879481
+30.540000 358.453035
+30.560000 359.027052
+30.580000 359.601532
+30.600000 360.176474
+30.620000 360.751879
+30.640000 361.327746
+30.660000 361.904077
+30.680000 362.480869
+30.700000 363.058125
+30.720000 363.635843
+30.740000 364.214023
+30.760000 364.792666
+30.780000 365.371772
+30.800000 365.951341
+30.820000 366.531372
+30.840000 367.111865
+30.860000 367.692822
+30.880000 368.274241
+30.900000 368.856122
+30.920000 369.438466
+30.940000 370.021273
+30.960000 370.604543
+30.980000 371.188275
+31.000000 371.772469
+31.020000 372.357127
+31.040000 372.942246
+31.060000 373.527829
+31.080000 374.113874
+31.100000 374.700382
+31.120000 375.287352
+31.140000 375.874785
+31.160000 376.462681
+31.180000 377.051039
+31.200000 377.639860
+31.220000 378.229144
+31.240000 378.818890
+31.260000 379.409098
+31.280000 379.999770
+31.300000 380.590904
+31.320000 381.182500
+31.340000 381.774560
+31.360000 382.367082
+31.380000 382.960066
+31.400000 383.553513
+31.420000 384.147423
+31.440000 384.741795
+31.460000 385.336630
+31.480000 385.931928
+31.500000 386.527688
+31.520000 387.123911
+31.540000 387.720596
+31.560000 388.317744
+31.580000 388.915355
+31.600000 389.513428
+31.620000 390.111964
+31.640000 390.710963
+31.660000 391.310424
+31.680000 391.910348
+31.700000 392.510734
+31.720000 393.111583
+31.740000 393.712895
+31.760000 394.314669
+31.780000 394.916906
+31.800000 395.519606
+31.820000 396.122768
+31.840000 396.726393
+31.860000 397.330480
+31.880000 397.935030
+31.900000 398.540043
+31.920000 399.145518
+31.940000 399.751456
+31.960000 400.357856
+31.980000 400.964719
+32.000000 401.572045
+32.020000 402.179833
+32.040000 402.788084
+32.060000 403.396798
+32.080000 404.005974
+32.100000 404.615613
+32.120000 405.225715
+32.140000 405.836279
+32.160000 406.447305
+32.180000 407.058795
+32.200000 407.670747
+32.220000 408.283161
+32.240000 408.896039
+32.260000 409.509378
+32.280000 410.123181
+32.300000 410.737446
+32.320000 411.352174
+32.340000 411.967364
+32.360000 412.583017
+32.380000 413.199132
+32.400000 413.815711
+32.420000 414.432751
+32.440000 415.050255
+32.460000 415.668221
+32.480000 416.286649
+32.500000 416.905541
+32.520000 417.524895
+32.540000 418.144711
+32.560000 418.764990
+32.580000 419.385732
+32.600000 420.006937
+32.620000 420.628604
+32.640000 421.250733
+32.660000 421.873325
+32.680000 422.496380
+32.700000 423.119898
+32.720000 423.743878
+32.740000 424.368321
+32.760000 424.993226
+32.780000 425.618594
+32.800000 426.244425
+32.820000 426.870718
+32.840000 427.497474
+32.860000 428.124692
+32.880000 428.752373
+32.900000 429.380517
+32.920000 430.009123
+32.940000 430.638192
+32.960000 431.267724
+32.980000 431.897718
+33.000000 432.528175
+33.020000 433.159094
+33.040000 433.790477
+33.060000 434.422321
+33.080000 435.054629
+33.100000 435.687399
+33.120000 436.320631
+33.140000 436.954326
+33.160000 437.588484
+33.180000 438.223104
+33.200000 438.858188
+33.220000 439.493733
+33.240000 440.129741
+33.260000 440.766212
+33.280000 441.403146
+33.300000 442.040542
+33.320000 442.678401
+33.340000 443.316722
+33.360000 443.955506
+33.380000 444.594753
+33.400000 445.234462
+33.420000 445.874634
+33.440000 446.515269
+33.460000 447.156366
+33.480000 447.797925
+33.500000 448.439948
+33.520000 449.082433
+33.540000 449.725380
+33.560000 450.368791
+33.580000 451.012664
+33.600000 451.656999
+33.620000 452.301797
+33.640000 452.947058
+33.660000 453.592781
+33.680000 454.238967
+33.700000 454.885616
+33.720000 455.532727
+33.740000 456.180301
+33.760000 456.828337
+33.780000 457.476836
+33.800000 458.125798
+33.820000 458.775222
+33.840000 459.425109
+33.860000 460.075459
+33.880000 460.726271
+33.900000 461.377546
+33.920000 462.029283
+33.940000 462.681483
+33.960000 463.334146
+33.980000 463.987271
+34.000000 464.640859
+34.020000 465.294910
+34.040000 465.949423
+34.060000 466.604399
+34.080000 467.259837
+34.100000 467.915738
+34.120000 468.572102
+34.140000 469.228928
+34.160000 469.886217
+34.180000 470.543968
+34.200000 471.202183
+34.220000 471.860859
+34.240000 472.519999
+34.260000 473.179601
+34.280000 473.839665
+34.300000 474.500192
+34.320000 475.161182
+34.340000 475.822635
+34.360000 476.484550
+34.380000 477.146928
+34.400000 477.809768
+34.420000 478.473071
+34.440000 479.136837
+34.460000 479.801065
+34.480000 480.465756
+34.500000 481.130909
+34.520000 481.796525
+34.540000 482.462604
+34.560000 483.129145
+34.580000 483.796149
+34.600000 484.463616
+34.620000 485.131545
+34.640000 485.799937
+34.660000 486.468791
+34.680000 487.138108
+34.700000 487.807888
+34.720000 488.478130
+34.740000 489.148835
+34.760000 489.820003
+34.780000 490.491633
+34.800000 491.163725
+34.820000 491.836281
+34.840000 492.509299
+34.860000 493.182780
+34.880000 493.856723
+34.900000 494.531129
+34.920000 495.205997
+34.940000 495.881328
+34.960000 496.557122
+34.980000 497.233379
+35.000000 497.910097
+35.020000 498.587279
+35.040000 499.264923
+35.060000 499.943030
+35.080000 500.621600
+35.100000 501.300632
+35.120000 501.980127
+35.140000 502.660084
+35.160000 503.340504
+35.180000 504.021386
+35.200000 504.702732
+35.220000 505.384540
+35.240000 506.066810
+35.260000 506.749543
+35.280000 507.432739
+35.300000 508.116397
+35.320000 508.800518
+35.340000 509.485102
+35.360000 510.170148
+35.380000 510.855657
+35.400000 511.541628
+35.420000 512.228062
+35.440000 512.914959
+35.460000 513.602318
+35.480000 514.290140
+35.500000 514.978424
+35.520000 515.667172
+35.540000 516.356381
+35.560000 517.046054
+35.580000 517.736189
+35.600000 518.426787
+35.620000 519.117847
+35.640000 519.809370
+35.660000 520.501355
+35.680000 521.193803
+35.700000 521.886714
+35.720000 522.580087
+35.740000 523.273923
+35.760000 523.968222
+35.780000 524.662983
+35.800000 525.358207
+35.820000 526.053894
+35.840000 526.750043
+35.860000 527.446654
+35.880000 528.143729
+35.900000 528.841266
+35.920000 529.539265
+35.940000 530.237728
+35.960000 530.936652
+35.980000 531.636040
+36.000000 532.335890
+36.020000 533.036203
+36.040000 533.736978
+36.060000 534.438216
+36.080000 535.139917
+36.100000 535.842080
+36.120000 536.544706
+36.140000 537.247794
+36.160000 537.951345
+36.180000 538.655359
+36.200000 539.359835
+36.220000 540.064774
+36.240000 540.770175
+36.260000 541.476040
+36.280000 542.182366
+36.300000 542.889156
+36.320000 543.596408
+36.340000 544.304122
+36.360000 545.012300
+36.380000 545.720940
+36.400000 546.430042
+36.420000 547.139607
+36.440000 547.849635
+36.460000 548.560125
+36.480000 549.271078
+36.500000 549.982494
+36.520000 550.694372
+36.540000 551.406713
+36.560000 552.119517
+36.580000 552.832783
+36.600000 553.546512
+36.620000 554.260703
+36.640000 554.975357
+36.660000 555.690473
+36.680000 556.406053
+36.700000 557.122094
+36.720000 557.838599
+36.740000 558.555566
+36.760000 559.272996
+36.780000 559.990888
+36.800000 560.709243
+36.820000 561.428061
+36.840000 562.147341
+36.860000 562.867084
+36.880000 563.587289
+36.900000 564.307957
+36.920000 565.029088
+36.940000 565.750681
+36.960000 566.472737
+36.980000 567.195256
+37.000000 567.918237
+37.020000 568.641680
+37.040000 569.365587
+37.060000 570.089956
+37.080000 570.814788
+37.100000 571.540082
+37.120000 572.265839
+37.140000 572.992058
+37.160000 573.718740
+37.180000 574.445885
+37.200000 575.173493
+37.220000 575.901563
+37.240000 576.630095
+37.260000 577.359090
+37.280000 578.088548
+37.300000 578.818469
+37.320000 579.548852
+37.340000 580.279698
+37.360000 581.011006
+37.380000 581.742777
+37.400000 582.475011
+37.420000 583.207707
+37.440000 583.940866
+37.460000 584.674487
+37.480000 585.408571
+37.500000 586.143118
+37.520000 586.878127
+37.540000 587.613599
+37.560000 588.349534
+37.580000 589.085931
+37.600000 589.822791
+37.620000 590.560113
+37.640000 591.297898
+37.660000 592.036146
+37.680000 592.774856
+37.700000 593.514029
+37.720000 594.253665
+37.740000 594.993763
+37.760000 595.734324
+37.780000 596.475347
+37.800000 597.216833
+37.820000 597.958782
+37.840000 598.701193
+37.860000 599.444067
+37.880000 600.187403
+37.900000 600.931203
+37.920000 601.675464
+37.940000 602.420189
+37.960000 603.165376
+37.980000 603.911025
+38.000000 604.657138
+38.020000 605.403712
+38.040000 606.150750
+38.060000 606.898250
+38.080000 607.646213
+38.100000 608.394638
+38.120000 609.143526
+38.140000 609.892877
+38.160000 610.642690
+38.180000 611.392966
+38.200000 612.143704
+38.220000 612.894905
+38.240000 613.646569
+38.260000 614.398695
+38.280000 615.151284
+38.300000 615.904336
+38.320000 616.657850
+38.340000 617.411827
+38.360000 618.166266
+38.380000 618.921168
+38.400000 619.676533
+38.420000 620.432360
+38.440000 621.188650
+38.460000 621.945403
+38.480000 622.702618
+38.500000 623.460296
+38.520000 624.218436
+38.540000 624.977039
+38.560000 625.736105
+38.580000 626.495633
+38.600000 627.255624
+38.620000 628.016078
+38.640000 628.776994
+38.660000 629.538373
+38.680000 630.300214
+38.700000 631.062518
+38.720000 631.825285
+38.740000 632.588514
+38.760000 633.352206
+38.780000 634.116360
+38.800000 634.880977
+38.820000 635.646057
+38.840000 636.411599
+38.860000 637.177604
+38.880000 637.944072
+38.900000 638.711002
+38.920000 639.478395
+38.940000 640.246250
+38.960000 641.014569
+38.980000 641.783349
+39.000000 642.552593
+39.020000 643.322299
+39.040000 644.092467
+39.060000 644.863098
+39.080000 645.634192
+39.100000 646.405749
+39.120000 647.177768
+39.140000 647.950249
+39.160000 648.723194
+39.180000 649.496601
+39.200000 650.270470
+39.220000 651.044802
+39.240000 651.819597
+39.260000 652.594855
+39.280000 653.370575
+39.300000 654.146757
+39.320000 654.923402
+39.340000 655.700510
+39.360000 656.478081
+39.380000 657.256114
+39.400000 658.034610
+39.420000 658.813568
+39.440000 659.592989
+39.460000 660.372873
+39.480000 661.153219
+39.500000 661.934028
+39.520000 662.715299
+39.540000 663.497034
+39.560000 664.279230
+39.580000 665.061890
+39.600000 665.845012
+39.620000 666.628596
+39.640000 667.412643
+39.660000 668.197153
+39.680000 668.982126
+39.700000 669.767561
+39.720000 670.553459
+39.740000 671.339819
+39.760000 672.126642
+39.780000 672.913927
+39.800000 673.701676
+39.820000 674.489886
+39.840000 675.278560
+39.860000 676.067696
+39.880000 676.857295
+39.900000 677.647356
+39.920000 678.437880
+39.940000 679.228866
+39.960000 680.020316
+39.980000 680.812227
+40.000000 681.604602
+40.020000 682.397439
+40.040000 683.190739
+40.060000 683.984501
+40.080000 684.778726
+40.100000 685.573413
+40.120000 686.368563
+40.140000 687.164176
+40.160000 687.960252
+40.180000 688.756790
+40.200000 689.553790
+40.220000 690.351253
+40.240000 691.149179
+40.260000 691.947568
+40.280000 692.746419
+40.300000 693.545733
+40.320000 694.345509
+40.340000 695.145748
+40.360000 695.946450
+40.380000 696.747614
+40.400000 697.549241
+40.420000 698.351330
+40.440000 699.153882
+40.460000 699.956897
+40.480000 700.760374
+40.500000 701.564314
+40.520000 702.368717
+40.540000 703.173582
+40.560000 703.978910
+40.580000 704.784700
+40.600000 705.590953
+40.620000 706.397669
+40.640000 707.204847
+40.660000 708.012488
+40.680000 708.820592
+40.700000 709.629158
+40.720000 710.438187
+40.740000 711.247678
+40.760000 712.057632
+40.780000 712.868049
+40.800000 713.678928
+40.820000 714.490270
+40.840000 715.302075
+40.860000 716.114342
+40.880000 716.927072
+40.900000 717.740264
+40.920000 718.553919
+40.940000 719.368037
+40.960000 720.182617
+40.980000 720.997660
+41.000000 721.813165
+41.020000 722.629133
+41.040000 723.445564
+41.060000 724.262458
+41.080000 725.079813
+41.100000 725.897632
+41.120000 726.715913
+41.140000 727.534657
+41.160000 728.353864
+41.180000 729.173533
+41.200000 729.993664
+41.220000 730.814259
+41.240000 731.635316
+41.260000 732.456835
+41.280000 733.278818
+41.300000 734.101262
+41.320000 734.924170
+41.340000 735.747540
+41.360000 736.571373
+41.380000 737.395668
+41.400000 738.220426
+41.420000 739.045646
+41.440000 739.871330
+41.460000 740.697475
+41.480000 741.524084
+41.500000 742.351155
+41.520000 743.178688
+41.540000 744.006685
+41.560000 744.835144
+41.580000 745.664065
+41.600000 746.493449
+41.620000 747.323296
+41.640000 748.153606
+41.660000 748.984378
+41.680000 749.815612
+41.700000 750.647309
+41.720000 751.479469
+41.740000 752.312092
+41.760000 753.145177
+41.780000 753.978725
+41.800000 754.812735
+41.820000 755.647208
+41.840000 756.482144
+41.860000 757.317542
+41.880000 758.153403
+41.900000 758.989726
+41.920000 759.826512
+41.940000 760.663761
+41.960000 761.501472
+41.980000 762.339646
+42.000000 763.178283
+42.020000 764.017382
+42.040000 764.856944
+42.060000 765.696968
+42.080000 766.537455
+42.100000 767.378405
+42.120000 768.219817
+42.140000 769.061692
+42.160000 769.904030
+42.180000 770.746830
+42.200000 771.590093
+42.220000 772.433818
+42.240000 773.278006
+42.260000 774.122657
+42.280000 774.967770
+42.300000 775.813346
+42.320000 776.659385
+42.340000 777.505886
+42.360000 778.352850
+42.380000 779.200276
+42.400000 780.048165
+42.420000 780.896517
+42.440000 781.745331
+42.460000 782.594608
+42.480000 783.444347
+42.500000 784.294550
+42.520000 785.145214
+42.540000 785.996342
+42.560000 786.847932
+42.580000 787.699984
+42.600000 788.552499
+42.620000 789.405477
+42.640000 790.258918
+42.660000 791.112821
+42.680000 791.967187
+42.700000 792.822015
+42.720000 793.677306
+42.740000 794.533059
+42.760000 795.389276
+42.780000 796.245955
+42.800000 797.103096
+42.820000 797.960700
+42.840000 798.818767
+42.860000 799.677296
+42.880000 800.536288
+42.900000 801.395743
+42.920000 802.255660
+42.940000 803.116040
+42.960000 803.976882
+42.980000 804.838187
+43.000000 805.699955
+43.020000 806.562185
+43.040000 807.424878
+43.060000 808.288033
+43.080000 809.151652
+43.100000 810.015732
+43.120000 810.880276
+43.140000 811.745282
+43.160000 812.610750
+43.180000 813.476682
+43.200000 814.343076
+43.220000 815.209932
+43.240000 816.077251
+43.260000 816.945033
+43.280000 817.813277
+43.300000 818.681984
+43.320000 819.551154
+43.340000 820.420786
+43.360000 821.290881
+43.380000 822.161438
+43.400000 823.032459
+43.420000 823.903941
+43.440000 824.775887
+43.460000 825.648295
+43.480000 826.521165
+43.500000 827.394498
+43.520000 828.268294
+43.540000 829.142553
+43.560000 830.017274
+43.580000 830.892457
+43.600000 831.768104
+43.620000 832.644213
+43.640000 833.520784
+43.660000 834.397818
+43.680000 835.275315
+43.700000 836.153275
+43.720000 837.031697
+43.740000 837.910581
+43.760000 838.789929
+43.780000 839.669739
+43.800000 840.550011
+43.820000 841.430746
+43.840000 842.311944
+43.860000 843.193604
+43.880000 844.075727
+43.900000 844.958313
+43.920000 845.841361
+43.940000 846.724872
+43.960000 847.608846
+43.980000 848.493282
+44.000000 849.378181
+44.020000 850.263542
+44.040000 851.149366
+44.060000 852.035653
+44.080000 852.922402
+44.100000 853.809614
+44.120000 854.697288
+44.140000 855.585425
+44.160000 856.474025
+44.180000 857.363087
+44.200000 858.252612
+44.220000 859.142600
+44.240000 860.033050
+44.260000 860.923963
+44.280000 861.815338
+44.300000 862.707176
+44.320000 863.599477
+44.340000 864.492241
+44.360000 865.385466
+44.380000 866.279155
+44.400000 867.173306
+44.420000 868.067920
+44.440000 868.962996
+44.460000 869.858535
+44.480000 870.754537
+44.500000 871.651001
+44.520000 872.547928
+44.540000 873.445318
+44.560000 874.343170
+44.580000 875.241485
+44.600000 876.140262
+44.620000 877.039502
+44.640000 877.939205
+44.660000 878.839370
+44.680000 879.739998
+44.700000 880.641089
+44.720000 881.542642
+44.740000 882.444657
+44.760000 883.347136
+44.780000 884.250077
+44.800000 885.153480
+44.820000 886.057347
+44.840000 886.961676
+44.860000 887.866467
+44.880000 888.771721
+44.900000 889.677438
+44.920000 890.583617
+44.940000 891.490259
+44.960000 892.397364
+44.980000 893.304931
+45.000000 894.212961
+45.020000 895.121453
+45.040000 896.030408
+45.060000 896.939826
+45.080000 897.849706
+45.100000 898.760049
+45.120000 899.670855
+45.140000 900.582123
+45.160000 901.493854
+45.180000 902.406047
+45.200000 903.318703
+45.220000 904.231822
+45.240000 905.145403
+45.260000 906.059447
+45.280000 906.973954
+45.300000 907.888923
+45.320000 908.804355
+45.340000 909.720249
+45.360000 910.636606
+45.380000 911.553426
+45.400000 912.470708
+45.420000 913.388453
+45.440000 914.306660
+45.460000 915.225331
+45.480000 916.144463
+45.500000 917.064059
+45.520000 917.984117
+45.540000 918.904637
+45.560000 919.825621
+45.580000 920.747066
+45.600000 921.668975
+45.620000 922.591346
+45.640000 923.514180
+45.660000 924.437476
+45.680000 925.361235
+45.700000 926.285457
+45.720000 927.210141
+45.740000 928.135288
+45.760000 929.060897
+45.780000 929.986969
+45.800000 930.913504
+45.820000 931.840501
+45.840000 932.767961
+45.860000 933.695884
+45.880000 934.624269
+45.900000 935.553117
+45.920000 936.482427
+45.940000 937.412200
+45.960000 938.342436
+45.980000 939.273134
+46.000000 940.204295
+46.020000 941.135919
+46.040000 942.068005
+46.060000 943.000554
+46.080000 943.933565
+46.100000 944.867039
+46.120000 945.800976
+46.140000 946.735375
+46.160000 947.670237
+46.180000 948.605561
+46.200000 949.541349
+46.220000 950.477598
+46.240000 951.414311
+46.260000 952.351486
+46.280000 953.289123
+46.300000 954.227223
+46.320000 955.165786
+46.340000 956.104812
+46.360000 957.044300
+46.380000 957.984251
+46.400000 958.924664
+46.420000 959.865540
+46.440000 960.806879
+46.460000 961.748680
+46.480000 962.690944
+46.500000 963.633670
+46.520000 964.576859
+46.540000 965.520511
+46.560000 966.464625
+46.580000 967.409202
+46.600000 968.354242
+46.620000 969.299744
+46.640000 970.245709
+46.660000 971.192136
+46.680000 972.139026
+46.700000 973.086379
+46.720000 974.034194
+46.740000 974.982472
+46.760000 975.931213
+46.780000 976.880416
+46.800000 977.830082
+46.820000 978.780210
+46.840000 979.730801
+46.860000 980.681855
+46.880000 981.633371
+46.900000 982.585350
+46.920000 983.537791
+46.940000 984.490696
+46.960000 985.444062
+46.980000 986.397892
+47.000000 987.352184
+47.020000 988.306938
+47.040000 989.262156
+47.060000 990.217835
+47.080000 991.173978
+47.100000 992.130583
+47.120000 993.087651
+47.140000 994.045181
+47.160000 995.003174
+47.180000 995.961630
+47.200000 996.920548
+47.220000 997.879929
+47.240000 998.839772
+47.260000 999.800078
+47.280000 1000.760847
+47.300000 1001.722078
+47.320000 1002.683772
+47.340000 1003.645929
+47.360000 1004.608548
+47.380000 1005.571630
+47.400000 1006.535174
+47.420000 1007.499181
+47.440000 1008.463651
+47.460000 1009.428583
+47.480000 1010.393978
+47.500000 1011.359836
+47.520000 1012.326156
+47.540000 1013.292939
+47.560000 1014.260184
+47.580000 1015.227892
+47.600000 1016.196063
+47.620000 1017.164696
+47.640000 1018.133792
+47.660000 1019.103350
+47.680000 1020.073372
+47.700000 1021.043855
+47.720000 1022.014802
+47.740000 1022.986211
+47.760000 1023.958082
+47.780000 1024.930417
+47.800000 1025.903213
+47.820000 1026.876473
+47.840000 1027.850195
+47.860000 1028.824380
+47.880000 1029.799027
+47.900000 1030.774137
+47.920000 1031.749710
+47.940000 1032.725745
+47.960000 1033.702243
+47.980000 1034.679203
+48.000000 1035.656626
+48.020000 1036.634512
+48.040000 1037.612860
+48.060000 1038.591671
+48.080000 1039.570945
+48.100000 1040.550681
+48.120000 1041.530880
+48.140000 1042.511541
+48.160000 1043.492665
+48.180000 1044.474252
+48.200000 1045.456301
+48.220000 1046.438813
+48.240000 1047.421788
+48.260000 1048.405225
+48.280000 1049.389125
+48.300000 1050.373487
+48.320000 1051.358312
+48.340000 1052.343600
+48.360000 1053.329350
+48.380000 1054.315563
+48.400000 1055.302239
+48.420000 1056.289377
+48.440000 1057.276978
+48.460000 1058.265041
+48.480000 1059.253567
+48.500000 1060.242556
+48.520000 1061.232007
+48.540000 1062.221921
+48.560000 1063.212297
+48.580000 1064.203136
+48.600000 1065.194438
+48.620000 1066.186202
+48.640000 1067.178429
+48.660000 1068.171119
+48.680000 1069.164271
+48.700000 1070.157886
+48.720000 1071.151963
+48.740000 1072.146504
+48.760000 1073.141506
+48.780000 1074.136972
+48.800000 1075.132900
+48.820000 1076.129290
+48.840000 1077.126143
+48.860000 1078.123459
+48.880000 1079.121238
+48.900000 1080.119479
+48.920000 1081.118182
+48.940000 1082.117349
+48.960000 1083.116978
+48.980000 1084.117069
+49.000000 1085.117623
+49.020000 1086.118640
+49.040000 1087.120119
+49.060000 1088.122061
+49.080000 1089.124466
+49.100000 1090.127333
+49.120000 1091.130663
+49.140000 1092.134456
+49.160000 1093.138711
+49.180000 1094.143429
+49.200000 1095.148609
+49.220000 1096.154252
+49.240000 1097.160358
+49.260000 1098.166926
+49.280000 1099.173957
+49.300000 1100.181450
+49.320000 1101.189406
+49.340000 1102.197825
+49.360000 1103.206707
+49.380000 1104.216051
+49.400000 1105.225857
+49.420000 1106.236126
+49.440000 1107.246858
+49.460000 1108.258053
+49.480000 1109.269710
+49.500000 1110.281830
+49.520000 1111.294412
+49.540000 1112.307457
+49.560000 1113.320964
+49.580000 1114.334935
+49.600000 1115.349367
+49.620000 1116.364263
+49.640000 1117.379621
+49.660000 1118.395442
+49.680000 1119.411725
+49.700000 1120.428471
+49.720000 1121.445679
+49.740000 1122.463351
+49.760000 1123.481484
+49.780000 1124.500081
+49.800000 1125.519140
+49.820000 1126.538661
+49.840000 1127.558646
+49.860000 1128.579093
+49.880000 1129.600002
+49.900000 1130.621374
+49.920000 1131.643209
+49.940000 1132.665506
+49.960000 1133.688266
+49.980000 1134.711489
diff --git a/mrdna/arbdmodel/resources/two_bead_model/NBBB.dat b/mrdna/arbdmodel/resources/two_bead_model/NBBB.dat
new file mode 100644
index 0000000000000000000000000000000000000000..369ec1bf5dc25fb1f4fa63ac261ed8f5064dc524
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/NBBB.dat
@@ -0,0 +1,720 @@
+0.000000 16.943477
+0.050000 16.614970
+0.100000 16.289356
+0.150000 15.966632
+0.200000 15.646800
+0.250000 15.329859
+0.300000 15.015810
+0.350000 14.704652
+0.400000 14.396385
+0.450000 14.091010
+0.500000 13.788526
+0.550000 13.488934
+0.600000 13.192233
+0.650000 12.898423
+0.700000 12.607505
+0.750000 12.319478
+0.800000 12.034343
+0.850000 11.752099
+0.900000 11.472746
+0.950000 11.196285
+1.000000 10.922715
+1.050000 10.652036
+1.100000 10.384249
+1.150000 10.119353
+1.200000 9.857349
+1.250000 9.598236
+1.300000 9.342014
+1.350000 9.088684
+1.400000 8.838245
+1.450000 8.590698
+1.500000 8.346041
+1.550000 8.104277
+1.600000 7.865403
+1.650000 7.629422
+1.700000 7.396331
+1.750000 7.166132
+1.800000 6.938824
+1.850000 6.714408
+1.900000 6.492883
+1.950000 6.274249
+2.000000 6.058507
+2.050000 5.845656
+2.100000 5.635697
+2.150000 5.428628
+2.200000 5.224452
+2.250000 5.023166
+2.300000 4.824773
+2.350000 4.629270
+2.400000 4.436659
+2.450000 4.246939
+2.500000 4.060111
+2.550000 3.876174
+2.600000 3.695128
+2.650000 3.516974
+2.700000 3.341711
+2.750000 3.169340
+2.800000 2.999860
+2.850000 2.833271
+2.900000 2.669574
+2.950000 2.508768
+3.000000 2.350853
+3.050000 2.195830
+3.100000 2.043698
+3.150000 1.894458
+3.200000 1.748109
+3.250000 1.604651
+3.300000 1.464085
+3.350000 1.326410
+3.400000 1.191627
+3.450000 1.059735
+3.500000 0.930734
+3.550000 0.804625
+3.600000 0.681407
+3.650000 0.561080
+3.700000 0.443645
+3.750000 0.329102
+3.800000 0.162707
+3.850000 -0.025370
+3.900000 -0.355309
+3.950000 -0.612645
+4.000000 -0.806664
+4.050000 -0.955467
+4.100000 -1.038728
+4.150000 -1.095670
+4.200000 -1.136416
+4.250000 -1.156285
+4.300000 -1.152899
+4.350000 -1.131607
+4.400000 -1.099624
+4.450000 -1.061907
+4.500000 -1.020918
+4.550000 -0.978605
+4.600000 -0.936278
+4.650000 -0.894924
+4.700000 -0.857523
+4.750000 -0.825143
+4.800000 -0.794411
+4.850000 -0.767690
+4.900000 -0.746475
+4.950000 -0.726109
+5.000000 -0.706465
+5.050000 -0.690578
+5.100000 -0.675571
+5.150000 -0.657983
+5.200000 -0.639541
+5.250000 -0.620856
+5.300000 -0.600853
+5.350000 -0.578828
+5.400000 -0.556780
+5.450000 -0.535478
+5.500000 -0.512010
+5.550000 -0.487820
+5.600000 -0.465589
+5.650000 -0.444334
+5.700000 -0.421660
+5.750000 -0.400215
+5.800000 -0.379853
+5.850000 -0.358825
+5.900000 -0.337273
+5.950000 -0.317466
+6.000000 -0.301351
+6.050000 -0.286860
+6.100000 -0.273178
+6.150000 -0.261699
+6.200000 -0.251763
+6.250000 -0.240272
+6.300000 -0.229341
+6.350000 -0.220996
+6.400000 -0.214251
+6.450000 -0.209894
+6.500000 -0.207792
+6.550000 -0.207581
+6.600000 -0.208171
+6.650000 -0.208403
+6.700000 -0.207800
+6.750000 -0.207315
+6.800000 -0.204654
+6.850000 -0.199913
+6.900000 -0.194933
+6.950000 -0.187700
+7.000000 -0.178440
+7.050000 -0.170803
+7.100000 -0.164007
+7.150000 -0.157428
+7.200000 -0.153150
+7.250000 -0.150178
+7.300000 -0.147745
+7.350000 -0.146557
+7.400000 -0.146021
+7.450000 -0.147243
+7.500000 -0.148921
+7.550000 -0.148976
+7.600000 -0.148914
+7.650000 -0.148831
+7.700000 -0.146473
+7.750000 -0.142945
+7.800000 -0.138532
+7.850000 -0.131986
+7.900000 -0.123978
+7.950000 -0.114336
+8.000000 -0.103904
+8.050000 -0.092883
+8.100000 -0.080819
+8.150000 -0.067647
+8.200000 -0.055389
+8.250000 -0.043878
+8.300000 -0.033545
+8.350000 -0.024138
+8.400000 -0.015146
+8.450000 -0.006377
+8.500000 0.001973
+8.550000 0.010082
+8.600000 0.017849
+8.650000 0.024504
+8.700000 0.031212
+8.750000 0.038918
+8.800000 0.046813
+8.850000 0.053275
+8.900000 0.059917
+8.950000 0.066918
+9.000000 0.072369
+9.050000 0.077349
+9.100000 0.083073
+9.150000 0.088059
+9.200000 0.092297
+9.250000 0.096861
+9.300000 0.101186
+9.350000 0.105383
+9.400000 0.109585
+9.450000 0.113022
+9.500000 0.116812
+9.550000 0.121104
+9.600000 0.125563
+9.650000 0.129825
+9.700000 0.134621
+9.750000 0.138942
+9.800000 0.142214
+9.850000 0.144762
+9.900000 0.147744
+9.950000 0.150790
+10.000000 0.153044
+10.050000 0.155610
+10.100000 0.157822
+10.150000 0.158548
+10.200000 0.158092
+10.250000 0.156944
+10.300000 0.153806
+10.350000 0.149406
+10.400000 0.144387
+10.450000 0.137935
+10.500000 0.130810
+10.550000 0.124016
+10.600000 0.117955
+10.650000 0.112769
+10.700000 0.108435
+10.750000 0.105746
+10.800000 0.104469
+10.850000 0.103014
+10.900000 0.102568
+10.950000 0.103422
+11.000000 0.103183
+11.050000 0.102957
+11.100000 0.104129
+11.150000 0.104481
+11.200000 0.104818
+11.250000 0.106457
+11.300000 0.107356
+11.350000 0.108270
+11.400000 0.110211
+11.450000 0.112277
+11.500000 0.114055
+11.550000 0.116443
+11.600000 0.118532
+11.650000 0.119803
+11.700000 0.121397
+11.750000 0.123972
+11.800000 0.127344
+11.850000 0.130132
+11.900000 0.132729
+11.950000 0.134786
+12.000000 0.135804
+12.050000 0.136590
+12.100000 0.138302
+12.150000 0.140124
+12.200000 0.140881
+12.250000 0.141043
+12.300000 0.139435
+12.350000 0.136560
+12.400000 0.134058
+12.450000 0.132100
+12.500000 0.130556
+12.550000 0.129493
+12.600000 0.127872
+12.650000 0.125478
+12.700000 0.122574
+12.750000 0.118506
+12.800000 0.115118
+12.850000 0.112407
+12.900000 0.108865
+12.950000 0.106005
+13.000000 0.104384
+13.050000 0.101658
+13.100000 0.098566
+13.150000 0.096347
+13.200000 0.093007
+13.250000 0.088850
+13.300000 0.085533
+13.350000 0.082528
+13.400000 0.078731
+13.450000 0.075235
+13.500000 0.072080
+13.550000 0.067847
+13.600000 0.062886
+13.650000 0.058998
+13.700000 0.055182
+13.750000 0.050366
+13.800000 0.046138
+13.850000 0.042465
+13.900000 0.037788
+13.950000 0.033232
+14.000000 0.029521
+14.050000 0.025589
+14.100000 0.021622
+14.150000 0.017894
+14.200000 0.014219
+14.250000 0.010550
+14.300000 0.006820
+14.350000 0.003485
+14.400000 0.000940
+14.450000 -0.001596
+14.500000 -0.003659
+14.550000 -0.005102
+14.600000 -0.006703
+14.650000 -0.008353
+14.700000 -0.009541
+14.750000 -0.010653
+14.800000 -0.011114
+14.850000 -0.010841
+14.900000 -0.010907
+14.950000 -0.011115
+15.000000 -0.011328
+15.050000 -0.011945
+15.100000 -0.012769
+15.150000 -0.012888
+15.200000 -0.012749
+15.250000 -0.012392
+15.300000 -0.011380
+15.350000 -0.010647
+15.400000 -0.010256
+15.450000 -0.009824
+15.500000 -0.009475
+15.550000 -0.009995
+15.600000 -0.010964
+15.650000 -0.011625
+15.700000 -0.011413
+15.750000 -0.011352
+15.800000 -0.011728
+15.850000 -0.010998
+15.900000 -0.010704
+15.950000 -0.011893
+16.000000 -0.012555
+16.050000 -0.012363
+16.100000 -0.013404
+16.150000 -0.014270
+16.200000 -0.014102
+16.250000 -0.014675
+16.300000 -0.015904
+16.350000 -0.016388
+16.400000 -0.016585
+16.450000 -0.017194
+16.500000 -0.017691
+16.550000 -0.017637
+16.600000 -0.017538
+16.650000 -0.018255
+16.700000 -0.019244
+16.750000 -0.019782
+16.800000 -0.020253
+16.850000 -0.021100
+16.900000 -0.021349
+16.950000 -0.021180
+17.000000 -0.021135
+17.050000 -0.021042
+17.100000 -0.020198
+17.150000 -0.019188
+17.200000 -0.018598
+17.250000 -0.018068
+17.300000 -0.017663
+17.350000 -0.017920
+17.400000 -0.018541
+17.450000 -0.018431
+17.500000 -0.018036
+17.550000 -0.017902
+17.600000 -0.017235
+17.650000 -0.015966
+17.700000 -0.015557
+17.750000 -0.015682
+17.800000 -0.015182
+17.850000 -0.014528
+17.900000 -0.013666
+17.950000 -0.012048
+18.000000 -0.010486
+18.050000 -0.009102
+18.100000 -0.007835
+18.150000 -0.007255
+18.200000 -0.006702
+18.250000 -0.005315
+18.300000 -0.004063
+18.350000 -0.003277
+18.400000 -0.002085
+18.450000 -0.000856
+18.500000 -0.000081
+18.550000 0.000766
+18.600000 0.002311
+18.650000 0.003663
+18.700000 0.004439
+18.750000 0.005060
+18.800000 0.005747
+18.850000 0.006225
+18.900000 0.006618
+18.950000 0.007143
+19.000000 0.007815
+19.050000 0.008219
+19.100000 0.008269
+19.150000 0.008557
+19.200000 0.008638
+19.250000 0.008616
+19.300000 0.009089
+19.350000 0.009399
+19.400000 0.009576
+19.450000 0.010318
+19.500000 0.010773
+19.550000 0.010448
+19.600000 0.010056
+19.650000 0.009265
+19.700000 0.008395
+19.750000 0.008467
+19.800000 0.008666
+19.850000 0.008960
+19.900000 0.009610
+19.950000 0.009991
+20.000000 0.009305
+20.050000 0.008800
+20.100000 0.009117
+20.150000 0.008956
+20.200000 0.008304
+20.250000 0.008363
+20.300000 0.008363
+20.350000 0.007069
+20.400000 0.006775
+20.450000 0.007521
+20.500000 0.007377
+20.550000 0.007375
+20.600000 0.008277
+20.650000 0.008383
+20.700000 0.007527
+20.750000 0.007482
+20.800000 0.007493
+20.850000 0.006942
+20.900000 0.006533
+20.950000 0.006684
+21.000000 0.006718
+21.050000 0.006601
+21.100000 0.006718
+21.150000 0.006795
+21.200000 0.006687
+21.250000 0.006600
+21.300000 0.006716
+21.350000 0.006690
+21.400000 0.006440
+21.450000 0.006731
+21.500000 0.007311
+21.550000 0.007622
+21.600000 0.007951
+21.650000 0.008312
+21.700000 0.008027
+21.750000 0.007357
+21.800000 0.006761
+21.850000 0.006566
+21.900000 0.006914
+21.950000 0.006986
+22.000000 0.006941
+22.050000 0.006849
+22.100000 0.006421
+22.150000 0.005916
+22.200000 0.006027
+22.250000 0.006221
+22.300000 0.006623
+22.350000 0.007147
+22.400000 0.007314
+22.450000 0.007039
+22.500000 0.006678
+22.550000 0.006473
+22.600000 0.006345
+22.650000 0.006455
+22.700000 0.007072
+22.750000 0.007967
+22.800000 0.008548
+22.850000 0.008995
+22.900000 0.009178
+22.950000 0.008970
+23.000000 0.008280
+23.050000 0.007580
+23.100000 0.007822
+23.150000 0.008562
+23.200000 0.008951
+23.250000 0.009792
+23.300000 0.010439
+23.350000 0.009407
+23.400000 0.008555
+23.450000 0.009039
+23.500000 0.008938
+23.550000 0.008728
+23.600000 0.009438
+23.650000 0.009516
+23.700000 0.008756
+23.750000 0.008951
+23.800000 0.009840
+23.850000 0.010203
+23.900000 0.010111
+23.950000 0.009989
+24.000000 0.009637
+24.050000 0.008504
+24.100000 0.007753
+24.150000 0.008473
+24.200000 0.009082
+24.250000 0.008793
+24.300000 0.008965
+24.350000 0.009479
+24.400000 0.009123
+24.450000 0.008410
+24.500000 0.008223
+24.550000 0.008696
+24.600000 0.008786
+24.650000 0.008354
+24.700000 0.008640
+24.750000 0.009134
+24.800000 0.008314
+24.850000 0.007191
+24.900000 0.006740
+24.950000 0.006349
+25.000000 0.006308
+25.050000 0.006801
+25.100000 0.007263
+25.150000 0.007668
+25.200000 0.007803
+25.250000 0.007061
+25.300000 0.006756
+25.350000 0.007147
+25.400000 0.007077
+25.450000 0.006862
+25.500000 0.007173
+25.550000 0.006932
+25.600000 0.006336
+25.650000 0.006123
+25.700000 0.005960
+25.750000 0.005953
+25.800000 0.006091
+25.850000 0.005668
+25.900000 0.005423
+25.950000 0.005845
+26.000000 0.005459
+26.050000 0.004945
+26.100000 0.005665
+26.150000 0.005751
+26.200000 0.004755
+26.250000 0.004702
+26.300000 0.004803
+26.350000 0.004156
+26.400000 0.004441
+26.450000 0.005253
+26.500000 0.005127
+26.550000 0.004714
+26.600000 0.004614
+26.650000 0.004191
+26.700000 0.003242
+26.750000 0.003033
+26.800000 0.003802
+26.850000 0.003741
+26.900000 0.002976
+26.950000 0.003281
+27.000000 0.003726
+27.050000 0.003277
+27.100000 0.002670
+27.150000 0.002458
+27.200000 0.002287
+27.250000 0.001647
+27.300000 0.000931
+27.350000 0.001648
+27.400000 0.002595
+27.450000 0.002100
+27.500000 0.001854
+27.550000 0.002297
+27.600000 0.001816
+27.650000 0.001134
+27.700000 0.001613
+27.750000 0.001845
+27.800000 0.001366
+27.850000 0.001029
+27.900000 0.000667
+27.950000 0.000138
+28.000000 -0.000008
+28.050000 -0.000286
+28.100000 -0.000799
+28.150000 -0.000768
+28.200000 -0.000686
+28.250000 -0.000910
+28.300000 -0.000586
+28.350000 0.000225
+28.400000 0.000489
+28.450000 0.000120
+28.500000 -0.000615
+28.550000 -0.001083
+28.600000 -0.000958
+28.650000 -0.000632
+28.700000 -0.000526
+28.750000 -0.000161
+28.800000 0.000246
+28.850000 -0.000222
+28.900000 -0.001002
+28.950000 -0.001036
+29.000000 -0.000603
+29.050000 -0.000665
+29.100000 -0.000896
+29.150000 -0.000692
+29.200000 -0.000228
+29.250000 -0.000155
+29.300000 -0.000449
+29.350000 -0.000444
+29.400000 -0.000344
+29.450000 -0.000693
+29.500000 -0.001006
+29.550000 -0.000472
+29.600000 -0.000124
+29.650000 -0.000358
+29.700000 -0.000283
+29.750000 0.000257
+29.800000 0.000427
+29.850000 0.000599
+29.900000 0.000849
+29.950000 0.001072
+30.000000 0.000715
+30.050000 -0.000176
+30.100000 -0.000116
+30.150000 0.000920
+30.200000 0.001104
+30.250000 0.000748
+30.300000 0.001504
+30.350000 0.001634
+30.400000 0.000486
+30.450000 0.000123
+30.500000 0.000761
+30.550000 0.000804
+30.600000 0.000439
+30.650000 0.000648
+30.700000 0.001065
+30.750000 0.001030
+30.800000 0.000623
+30.850000 0.001082
+30.900000 0.001706
+30.950000 0.001191
+31.000000 0.000943
+31.050000 0.001361
+31.100000 0.001058
+31.150000 0.000650
+31.200000 0.001267
+31.250000 0.001390
+31.300000 0.001082
+31.350000 0.001132
+31.400000 0.001070
+31.450000 0.000714
+31.500000 0.000870
+31.550000 0.001190
+31.600000 0.001079
+31.650000 0.000985
+31.700000 0.001273
+31.750000 0.001109
+31.800000 0.000581
+31.850000 0.000796
+31.900000 0.000801
+31.950000 -0.000223
+32.000000 -0.000087
+32.050000 0.001040
+32.100000 0.000855
+32.150000 0.000568
+32.200000 0.001439
+32.250000 0.001245
+32.300000 0.000121
+32.350000 0.000037
+32.400000 0.000176
+32.450000 -0.000053
+32.500000 0.000006
+32.550000 0.000414
+32.600000 0.000432
+32.650000 0.000380
+32.700000 0.000396
+32.750000 0.000454
+32.800000 0.000148
+32.850000 0.000204
+32.900000 0.000715
+32.950000 0.000382
+33.000000 -0.000023
+33.050000 0.000120
+33.100000 -0.000211
+33.150000 -0.000683
+33.200000 -0.000255
+33.250000 -0.000039
+33.300000 -0.000302
+33.350000 -0.000088
+33.400000 0.000125
+33.450000 0.000045
+33.500000 0.000299
+33.550000 0.001022
+33.600000 0.000962
+33.650000 0.000541
+33.700000 0.001101
+33.750000 0.001368
+33.800000 0.000454
+33.850000 0.000169
+33.900000 0.000425
+33.950000 -0.000477
+34.000000 -0.001367
+34.050000 -0.000988
+34.100000 -0.000731
+34.150000 -0.001108
+34.200000 -0.001162
+34.250000 -0.000680
+34.300000 -0.000433
+34.350000 -0.000364
+34.400000 0.000346
+34.450000 0.001114
+34.500000 0.000929
+34.550000 0.000845
+34.600000 0.001708
+34.650000 0.001710
+34.700000 0.000831
+34.750000 0.000839
+34.800000 0.000955
+34.850000 0.000408
+34.900000 0.000297
+34.950000 0.000500
+35.000000 0.000149
+35.050000 -0.000524
+35.100000 -0.002149
+35.150000 -0.003797
+35.200000 -0.003751
+35.250000 -0.003222
+35.300000 -0.003481
+35.350000 -0.002957
+35.400000 -0.001893
+35.450000 -0.001812
+35.500000 -0.001689
+35.550000 -0.000434
+35.600000 0.001494
+35.650000 0.003194
+35.700000 0.003816
+35.750000 0.003358
+35.800000 0.002595
+35.850000 0.000232
+35.900000 -0.002749
+35.950000 -0.003543
diff --git a/mrdna/arbdmodel/resources/two_bead_model/NBPB.dat b/mrdna/arbdmodel/resources/two_bead_model/NBPB.dat
new file mode 100644
index 0000000000000000000000000000000000000000..cb0898738463385f18ddfc0deb210637b41837ef
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/NBPB.dat
@@ -0,0 +1,720 @@
+0.000000 18.129563
+0.050000 17.807174
+0.100000 17.487677
+0.150000 17.171071
+0.200000 16.857357
+0.250000 16.546534
+0.300000 16.238602
+0.350000 15.933562
+0.400000 15.631413
+0.450000 15.332155
+0.500000 15.035789
+0.550000 14.742314
+0.600000 14.451731
+0.650000 14.164039
+0.700000 13.879238
+0.750000 13.597329
+0.800000 13.318311
+0.850000 13.042184
+0.900000 12.768949
+0.950000 12.498606
+1.000000 12.231153
+1.050000 11.966592
+1.100000 11.704923
+1.150000 11.446145
+1.200000 11.190258
+1.250000 10.937263
+1.300000 10.687159
+1.350000 10.439946
+1.400000 10.195625
+1.450000 9.954195
+1.500000 9.715656
+1.550000 9.480009
+1.600000 9.247254
+1.650000 9.017389
+1.700000 8.790416
+1.750000 8.566335
+1.800000 8.345145
+1.850000 8.126846
+1.900000 7.911438
+1.950000 7.698922
+2.000000 7.489298
+2.050000 7.282565
+2.100000 7.078723
+2.150000 6.877772
+2.200000 6.679713
+2.250000 6.484546
+2.300000 6.292269
+2.350000 6.102884
+2.400000 5.916391
+2.450000 5.732789
+2.500000 5.552078
+2.550000 5.374258
+2.600000 5.199331
+2.650000 5.027294
+2.700000 4.858149
+2.750000 4.691895
+2.800000 4.528532
+2.850000 4.368061
+2.900000 4.210482
+2.950000 4.055793
+3.000000 3.903996
+3.050000 3.755091
+3.100000 3.609077
+3.150000 3.465954
+3.200000 3.325723
+3.250000 3.188383
+3.300000 3.053934
+3.350000 2.922377
+3.400000 2.793711
+3.450000 2.667937
+3.500000 2.545054
+3.550000 2.425062
+3.600000 2.307962
+3.650000 2.193753
+3.700000 2.082435
+3.750000 1.974009
+3.800000 1.868474
+3.850000 1.765831
+3.900000 1.666079
+3.950000 1.569218
+4.000000 1.475249
+4.050000 1.384171
+4.100000 1.295985
+4.150000 1.210690
+4.200000 1.128286
+4.250000 1.048774
+4.300000 0.972153
+4.350000 0.898424
+4.400000 0.827586
+4.450000 0.759639
+4.500000 0.694584
+4.550000 0.632420
+4.600000 0.573147
+4.650000 0.516766
+4.700000 0.463276
+4.750000 0.412678
+4.800000 0.364971
+4.850000 0.320155
+4.900000 0.278231
+4.950000 0.239198
+5.000000 0.203056
+5.050000 0.169806
+5.100000 0.139447
+5.150000 0.111980
+5.200000 0.076200
+5.250000 0.038702
+5.300000 -0.031846
+5.350000 -0.090129
+5.400000 -0.135972
+5.450000 -0.170456
+5.500000 -0.191172
+5.550000 -0.205639
+5.600000 -0.214942
+5.650000 -0.219663
+5.700000 -0.219175
+5.750000 -0.212783
+5.800000 -0.203383
+5.850000 -0.191510
+5.900000 -0.174762
+5.950000 -0.154292
+6.000000 -0.130724
+6.050000 -0.102366
+6.100000 -0.071551
+6.150000 -0.043291
+6.200000 -0.017545
+6.250000 0.004696
+6.300000 0.019855
+6.350000 0.028783
+6.400000 0.033611
+6.450000 0.032206
+6.500000 0.025709
+6.550000 0.017436
+6.600000 0.006668
+6.650000 -0.006930
+6.700000 -0.019920
+6.750000 -0.032839
+6.800000 -0.047668
+6.850000 -0.062953
+6.900000 -0.077141
+6.950000 -0.092021
+7.000000 -0.107499
+7.050000 -0.122505
+7.100000 -0.137434
+7.150000 -0.152404
+7.200000 -0.166511
+7.250000 -0.179765
+7.300000 -0.192565
+7.350000 -0.204682
+7.400000 -0.216379
+7.450000 -0.227681
+7.500000 -0.238397
+7.550000 -0.247381
+7.600000 -0.254032
+7.650000 -0.258896
+7.700000 -0.261553
+7.750000 -0.260797
+7.800000 -0.257024
+7.850000 -0.250403
+7.900000 -0.240136
+7.950000 -0.226505
+8.000000 -0.210740
+8.050000 -0.193733
+8.100000 -0.176237
+8.150000 -0.158681
+8.200000 -0.141369
+8.250000 -0.124790
+8.300000 -0.109795
+8.350000 -0.096576
+8.400000 -0.085137
+8.450000 -0.076125
+8.500000 -0.068972
+8.550000 -0.062231
+8.600000 -0.056172
+8.650000 -0.051504
+8.700000 -0.047908
+8.750000 -0.045854
+8.800000 -0.044715
+8.850000 -0.042979
+8.900000 -0.040780
+8.950000 -0.037902
+9.000000 -0.033076
+9.050000 -0.026914
+9.100000 -0.021093
+9.150000 -0.015112
+9.200000 -0.008370
+9.250000 -0.002172
+9.300000 0.002685
+9.350000 0.007417
+9.400000 0.011843
+9.450000 0.014534
+9.500000 0.015722
+9.550000 0.016175
+9.600000 0.015699
+9.650000 0.014599
+9.700000 0.013562
+9.750000 0.013169
+9.800000 0.013259
+9.850000 0.013516
+9.900000 0.014448
+9.950000 0.016354
+10.000000 0.019146
+10.050000 0.023003
+10.100000 0.027905
+10.150000 0.032956
+10.200000 0.038181
+10.250000 0.043161
+10.300000 0.047209
+10.350000 0.050188
+10.400000 0.052344
+10.450000 0.053362
+10.500000 0.053584
+10.550000 0.053153
+10.600000 0.052115
+10.650000 0.051091
+10.700000 0.050307
+10.750000 0.049650
+10.800000 0.049371
+10.850000 0.049942
+10.900000 0.051191
+10.950000 0.053160
+11.000000 0.055360
+11.050000 0.057782
+11.100000 0.060770
+11.150000 0.063827
+11.200000 0.066436
+11.250000 0.069279
+11.300000 0.072507
+11.350000 0.074970
+11.400000 0.076694
+11.450000 0.078081
+11.500000 0.078838
+11.550000 0.078491
+11.600000 0.077575
+11.650000 0.076918
+11.700000 0.076606
+11.750000 0.075900
+11.800000 0.075112
+11.850000 0.074492
+11.900000 0.073401
+11.950000 0.071552
+12.000000 0.069685
+12.050000 0.068404
+12.100000 0.067182
+12.150000 0.065253
+12.200000 0.062980
+12.250000 0.060881
+12.300000 0.058053
+12.350000 0.055021
+12.400000 0.052758
+12.450000 0.050951
+12.500000 0.049289
+12.550000 0.047999
+12.600000 0.046604
+12.650000 0.045172
+12.700000 0.043770
+12.750000 0.041997
+12.800000 0.040687
+12.850000 0.039955
+12.900000 0.038902
+12.950000 0.037932
+13.000000 0.037486
+13.050000 0.036284
+13.100000 0.034750
+13.150000 0.033593
+13.200000 0.031912
+13.250000 0.030213
+13.300000 0.029336
+13.350000 0.028085
+13.400000 0.026612
+13.450000 0.025931
+13.500000 0.024847
+13.550000 0.022998
+13.600000 0.021767
+13.650000 0.021017
+13.700000 0.019729
+13.750000 0.018361
+13.800000 0.017577
+13.850000 0.016676
+13.900000 0.015145
+13.950000 0.014276
+14.000000 0.013843
+14.050000 0.012944
+14.100000 0.012047
+14.150000 0.011680
+14.200000 0.010601
+14.250000 0.009183
+14.300000 0.007988
+14.350000 0.006484
+14.400000 0.004824
+14.450000 0.003639
+14.500000 0.002556
+14.550000 0.001039
+14.600000 -0.000231
+14.650000 -0.001704
+14.700000 -0.003922
+14.750000 -0.006252
+14.800000 -0.007948
+14.850000 -0.009775
+14.900000 -0.011530
+14.950000 -0.012254
+15.000000 -0.012687
+15.050000 -0.013447
+15.100000 -0.013721
+15.150000 -0.013408
+15.200000 -0.013489
+15.250000 -0.013291
+15.300000 -0.012293
+15.350000 -0.011341
+15.400000 -0.010770
+15.450000 -0.010051
+15.500000 -0.009284
+15.550000 -0.008847
+15.600000 -0.008331
+15.650000 -0.007491
+15.700000 -0.006334
+15.750000 -0.005586
+15.800000 -0.005204
+15.850000 -0.004987
+15.900000 -0.004850
+15.950000 -0.005028
+16.000000 -0.004892
+16.050000 -0.004352
+16.100000 -0.004084
+16.150000 -0.004073
+16.200000 -0.003851
+16.250000 -0.003724
+16.300000 -0.004105
+16.350000 -0.004211
+16.400000 -0.004133
+16.450000 -0.004433
+16.500000 -0.004799
+16.550000 -0.004778
+16.600000 -0.004782
+16.650000 -0.004921
+16.700000 -0.005174
+16.750000 -0.005441
+16.800000 -0.005653
+16.850000 -0.005936
+16.900000 -0.006148
+16.950000 -0.005952
+17.000000 -0.005907
+17.050000 -0.005969
+17.100000 -0.005809
+17.150000 -0.005758
+17.200000 -0.005748
+17.250000 -0.005522
+17.300000 -0.005356
+17.350000 -0.005107
+17.400000 -0.004424
+17.450000 -0.003454
+17.500000 -0.002180
+17.550000 -0.000794
+17.600000 0.000247
+17.650000 0.001265
+17.700000 0.002303
+17.750000 0.003298
+17.800000 0.004591
+17.850000 0.006182
+17.900000 0.007585
+17.950000 0.008493
+18.000000 0.009404
+18.050000 0.010350
+18.100000 0.011227
+18.150000 0.012151
+18.200000 0.013439
+18.250000 0.014335
+18.300000 0.015068
+18.350000 0.016238
+18.400000 0.017245
+18.450000 0.017814
+18.500000 0.018612
+18.550000 0.019363
+18.600000 0.019737
+18.650000 0.020347
+18.700000 0.021243
+18.750000 0.022081
+18.800000 0.022501
+18.850000 0.022615
+18.900000 0.022822
+18.950000 0.023020
+19.000000 0.023110
+19.050000 0.023828
+19.100000 0.024998
+19.150000 0.025483
+19.200000 0.025720
+19.250000 0.026361
+19.300000 0.026695
+19.350000 0.026324
+19.400000 0.026429
+19.450000 0.026966
+19.500000 0.026933
+19.550000 0.026670
+19.600000 0.026761
+19.650000 0.026661
+19.700000 0.026148
+19.750000 0.025994
+19.800000 0.026020
+19.850000 0.025957
+19.900000 0.025668
+19.950000 0.025271
+20.000000 0.024760
+20.050000 0.024111
+20.100000 0.023611
+20.150000 0.023406
+20.200000 0.023191
+20.250000 0.022748
+20.300000 0.022359
+20.350000 0.021819
+20.400000 0.021328
+20.450000 0.021123
+20.500000 0.020825
+20.550000 0.020348
+20.600000 0.019902
+20.650000 0.019292
+20.700000 0.018572
+20.750000 0.018208
+20.800000 0.017720
+20.850000 0.017098
+20.900000 0.016682
+20.950000 0.015987
+21.000000 0.015076
+21.050000 0.014763
+21.100000 0.014478
+21.150000 0.013990
+21.200000 0.014046
+21.250000 0.013851
+21.300000 0.013015
+21.350000 0.012486
+21.400000 0.012077
+21.450000 0.011432
+21.500000 0.011545
+21.550000 0.012180
+21.600000 0.012328
+21.650000 0.012212
+21.700000 0.011972
+21.750000 0.011265
+21.800000 0.010703
+21.850000 0.010590
+21.900000 0.010631
+21.950000 0.010783
+22.000000 0.010929
+22.050000 0.010718
+22.100000 0.010277
+22.150000 0.009854
+22.200000 0.009701
+22.250000 0.009580
+22.300000 0.009054
+22.350000 0.008658
+22.400000 0.008614
+22.450000 0.008136
+22.500000 0.007667
+22.550000 0.008101
+22.600000 0.008243
+22.650000 0.007772
+22.700000 0.007697
+22.750000 0.007505
+22.800000 0.006393
+22.850000 0.005814
+22.900000 0.006075
+22.950000 0.006027
+23.000000 0.005844
+23.050000 0.006261
+23.100000 0.006589
+23.150000 0.006166
+23.200000 0.005892
+23.250000 0.006136
+23.300000 0.006162
+23.350000 0.005671
+23.400000 0.005475
+23.450000 0.005390
+23.500000 0.005119
+23.550000 0.005154
+23.600000 0.005491
+23.650000 0.005598
+23.700000 0.005555
+23.750000 0.005610
+23.800000 0.005490
+23.850000 0.005669
+23.900000 0.006108
+23.950000 0.006414
+24.000000 0.006632
+24.050000 0.006742
+24.100000 0.006500
+24.150000 0.006388
+24.200000 0.006608
+24.250000 0.006402
+24.300000 0.006188
+24.350000 0.006287
+24.400000 0.006112
+24.450000 0.005698
+24.500000 0.005816
+24.550000 0.006120
+24.600000 0.006062
+24.650000 0.005989
+24.700000 0.006055
+24.750000 0.005889
+24.800000 0.005522
+24.850000 0.005265
+24.900000 0.005148
+24.950000 0.004961
+25.000000 0.004598
+25.050000 0.004474
+25.100000 0.004432
+25.150000 0.004307
+25.200000 0.004395
+25.250000 0.004808
+25.300000 0.004738
+25.350000 0.004550
+25.400000 0.004663
+25.450000 0.004499
+25.500000 0.004138
+25.550000 0.004545
+25.600000 0.004988
+25.650000 0.004667
+25.700000 0.004315
+25.750000 0.004085
+25.800000 0.003422
+25.850000 0.003092
+25.900000 0.003363
+25.950000 0.003509
+26.000000 0.003605
+26.050000 0.003879
+26.100000 0.003819
+26.150000 0.003571
+26.200000 0.003661
+26.250000 0.003638
+26.300000 0.003367
+26.350000 0.003022
+26.400000 0.002759
+26.450000 0.002530
+26.500000 0.002598
+26.550000 0.002847
+26.600000 0.003121
+26.650000 0.003404
+26.700000 0.003648
+26.750000 0.003720
+26.800000 0.003617
+26.850000 0.003438
+26.900000 0.003143
+26.950000 0.002937
+27.000000 0.002638
+27.050000 0.002262
+27.100000 0.002130
+27.150000 0.002141
+27.200000 0.002176
+27.250000 0.002461
+27.300000 0.002851
+27.350000 0.003159
+27.400000 0.003202
+27.450000 0.002688
+27.500000 0.002051
+27.550000 0.001760
+27.600000 0.001666
+27.650000 0.001786
+27.700000 0.002088
+27.750000 0.002101
+27.800000 0.001964
+27.850000 0.001702
+27.900000 0.001464
+27.950000 0.001419
+28.000000 0.001555
+28.050000 0.001625
+28.100000 0.001734
+28.150000 0.001745
+28.200000 0.001744
+28.250000 0.001931
+28.300000 0.001981
+28.350000 0.001943
+28.400000 0.001904
+28.450000 0.001882
+28.500000 0.001757
+28.550000 0.001416
+28.600000 0.001085
+28.650000 0.000938
+28.700000 0.000534
+28.750000 0.000072
+28.800000 0.000169
+28.850000 0.000184
+28.900000 0.000145
+28.950000 0.000485
+29.000000 0.000762
+29.050000 0.000673
+29.100000 0.000722
+29.150000 0.000980
+29.200000 0.001103
+29.250000 0.000891
+29.300000 0.000779
+29.350000 0.000891
+29.400000 0.000457
+29.450000 0.000039
+29.500000 0.000355
+29.550000 0.000680
+29.600000 0.000308
+29.650000 0.000206
+29.700000 0.000335
+29.750000 0.000190
+29.800000 0.000143
+29.850000 0.000580
+29.900000 0.000902
+29.950000 0.000677
+30.000000 0.000591
+30.050000 0.000641
+30.100000 0.000437
+30.150000 0.000337
+30.200000 0.000880
+30.250000 0.001145
+30.300000 0.000933
+30.350000 0.000881
+30.400000 0.000766
+30.450000 0.000575
+30.500000 0.000557
+30.550000 0.000539
+30.600000 0.000738
+30.650000 0.001242
+30.700000 0.001261
+30.750000 0.001146
+30.800000 0.001425
+30.850000 0.001284
+30.900000 0.000779
+30.950000 0.000815
+31.000000 0.001183
+31.050000 0.001335
+31.100000 0.001524
+31.150000 0.001776
+31.200000 0.001596
+31.250000 0.001108
+31.300000 0.001006
+31.350000 0.001332
+31.400000 0.001478
+31.450000 0.001656
+31.500000 0.002102
+31.550000 0.002036
+31.600000 0.001734
+31.650000 0.001768
+31.700000 0.001647
+31.750000 0.001321
+31.800000 0.001454
+31.850000 0.001548
+31.900000 0.001443
+31.950000 0.001565
+32.000000 0.001569
+32.050000 0.001262
+32.100000 0.000939
+32.150000 0.001046
+32.200000 0.001485
+32.250000 0.001815
+32.300000 0.001932
+32.350000 0.002090
+32.400000 0.001858
+32.450000 0.001333
+32.500000 0.001122
+32.550000 0.001181
+32.600000 0.001283
+32.650000 0.001282
+32.700000 0.001273
+32.750000 0.001418
+32.800000 0.001593
+32.850000 0.001703
+32.900000 0.001922
+32.950000 0.001899
+33.000000 0.001449
+33.050000 0.001042
+33.100000 0.000742
+33.150000 0.000679
+33.200000 0.000836
+33.250000 0.000918
+33.300000 0.000802
+33.350000 0.000767
+33.400000 0.000715
+33.450000 0.000567
+33.500000 0.000647
+33.550000 0.000924
+33.600000 0.000709
+33.650000 0.000264
+33.700000 0.000351
+33.750000 0.000690
+33.800000 0.000841
+33.850000 0.001232
+33.900000 0.001627
+33.950000 0.001434
+34.000000 0.001079
+34.050000 0.001046
+34.100000 0.001067
+34.150000 0.000859
+34.200000 0.000637
+34.250000 0.000442
+34.300000 0.000182
+34.350000 0.000156
+34.400000 0.000553
+34.450000 0.000873
+34.500000 0.000805
+34.550000 0.000551
+34.600000 0.000167
+34.650000 -0.000400
+34.700000 -0.000739
+34.750000 -0.000496
+34.800000 -0.000231
+34.850000 -0.000208
+34.900000 0.000120
+34.950000 0.000531
+35.000000 0.000161
+35.050000 -0.000644
+35.100000 -0.001568
+35.150000 -0.002542
+35.200000 -0.003272
+35.250000 -0.003874
+35.300000 -0.003764
+35.350000 -0.002892
+35.400000 -0.002514
+35.450000 -0.002275
+35.500000 -0.000917
+35.550000 0.000104
+35.600000 0.000107
+35.650000 0.000030
+35.700000 -0.000821
+35.750000 -0.002853
+35.800000 -0.004839
+35.850000 -0.005967
+35.900000 -0.007253
+35.950000 -0.007073
diff --git a/mrdna/arbdmodel/resources/two_bead_model/NBPP.dat b/mrdna/arbdmodel/resources/two_bead_model/NBPP.dat
new file mode 100644
index 0000000000000000000000000000000000000000..256d384afb42bc4fc277ce05c965d7662b640a56
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/NBPP.dat
@@ -0,0 +1,720 @@
+0.000000 52.471701
+0.050000 51.923712
+0.100000 51.378614
+0.150000 50.836407
+0.200000 50.297092
+0.250000 49.760668
+0.300000 49.227136
+0.350000 48.696494
+0.400000 48.168745
+0.450000 47.643886
+0.500000 47.121919
+0.550000 46.602844
+0.600000 46.086660
+0.650000 45.573367
+0.700000 45.062965
+0.750000 44.555455
+0.800000 44.050837
+0.850000 43.549109
+0.900000 43.050273
+0.950000 42.554329
+1.000000 42.061276
+1.050000 41.571114
+1.100000 41.083844
+1.150000 40.599465
+1.200000 40.117977
+1.250000 39.639381
+1.300000 39.163676
+1.350000 38.690863
+1.400000 38.220941
+1.450000 37.753910
+1.500000 37.289771
+1.550000 36.828523
+1.600000 36.370166
+1.650000 35.914701
+1.700000 35.462128
+1.750000 35.012445
+1.800000 34.565654
+1.850000 34.121755
+1.900000 33.680747
+1.950000 33.242630
+2.000000 32.807404
+2.050000 32.375070
+2.100000 31.945628
+2.150000 31.519076
+2.200000 31.095417
+2.250000 30.674648
+2.300000 30.256771
+2.350000 29.841785
+2.400000 29.429691
+2.450000 29.020488
+2.500000 28.614176
+2.550000 28.210756
+2.600000 27.810228
+2.650000 27.412590
+2.700000 27.017844
+2.750000 26.625989
+2.800000 26.237026
+2.850000 25.850954
+2.900000 25.467774
+2.950000 25.087485
+3.000000 24.710087
+3.050000 24.335581
+3.100000 23.963966
+3.150000 23.595242
+3.200000 23.229410
+3.250000 22.866469
+3.300000 22.506420
+3.350000 22.149262
+3.400000 21.794995
+3.450000 21.443620
+3.500000 21.095136
+3.550000 20.749544
+3.600000 20.406843
+3.650000 20.067033
+3.700000 19.730115
+3.750000 19.396088
+3.800000 19.064952
+3.850000 18.736708
+3.900000 18.411355
+3.950000 18.088894
+4.000000 17.769324
+4.050000 17.452645
+4.100000 17.138858
+4.150000 16.827962
+4.200000 16.519958
+4.250000 16.214845
+4.300000 15.912623
+4.350000 15.613293
+4.400000 15.316854
+4.450000 15.023306
+4.500000 14.732650
+4.550000 14.444886
+4.600000 14.160012
+4.650000 13.878030
+4.700000 13.598940
+4.750000 13.322740
+4.800000 13.049433
+4.850000 12.779016
+4.900000 12.511491
+4.950000 12.246857
+5.000000 11.985115
+5.050000 11.726264
+5.100000 11.470305
+5.150000 11.217237
+5.200000 10.967060
+5.250000 10.719775
+5.300000 10.475381
+5.350000 10.233878
+5.400000 9.995267
+5.450000 9.759547
+5.500000 9.526719
+5.550000 9.296781
+5.600000 9.069736
+5.650000 8.845582
+5.700000 8.624319
+5.750000 8.405947
+5.800000 8.190467
+5.850000 7.977878
+5.900000 7.768181
+5.950000 7.561375
+6.000000 7.357460
+6.050000 7.156437
+6.100000 6.958305
+6.150000 6.763065
+6.200000 6.570716
+6.250000 6.381258
+6.300000 6.194692
+6.350000 6.011017
+6.400000 5.830234
+6.450000 5.652342
+6.500000 5.477341
+6.550000 5.305232
+6.600000 5.136014
+6.650000 4.969687
+6.700000 4.806252
+6.750000 4.645708
+6.800000 4.488056
+6.850000 4.333295
+6.900000 4.181425
+6.950000 4.032447
+7.000000 3.886360
+7.050000 3.743164
+7.100000 3.602860
+7.150000 3.465448
+7.200000 3.330926
+7.250000 3.199296
+7.300000 3.070558
+7.350000 2.944711
+7.400000 2.821755
+7.450000 2.701691
+7.500000 2.584518
+7.550000 2.470236
+7.600000 2.358846
+7.650000 2.250347
+7.700000 2.144739
+7.750000 2.042023
+7.800000 1.942199
+7.850000 1.845265
+7.900000 1.751223
+7.950000 1.660073
+8.000000 1.571814
+8.050000 1.486446
+8.100000 1.403969
+8.150000 1.324384
+8.200000 1.247691
+8.250000 1.173889
+8.300000 1.102978
+8.350000 1.034958
+8.400000 0.969830
+8.450000 0.907594
+8.500000 0.848248
+8.550000 0.791794
+8.600000 0.738232
+8.650000 0.687561
+8.700000 0.639781
+8.750000 0.594893
+8.800000 0.552896
+8.850000 0.513790
+8.900000 0.477576
+8.950000 0.444253
+9.000000 0.413821
+9.050000 0.386281
+9.100000 0.361633
+9.150000 0.339875
+9.200000 0.321010
+9.250000 0.305035
+9.300000 0.291952
+9.350000 0.277749
+9.400000 0.265124
+9.450000 0.257349
+9.500000 0.248221
+9.550000 0.235176
+9.600000 0.221881
+9.650000 0.205713
+9.700000 0.188012
+9.750000 0.171178
+9.800000 0.154007
+9.850000 0.136896
+9.900000 0.122156
+9.950000 0.109608
+10.000000 0.099002
+10.050000 0.090820
+10.100000 0.084797
+10.150000 0.080382
+10.200000 0.077381
+10.250000 0.074983
+10.300000 0.072574
+10.350000 0.070305
+10.400000 0.068186
+10.450000 0.065943
+10.500000 0.064011
+10.550000 0.062990
+10.600000 0.062257
+10.650000 0.061414
+10.700000 0.060459
+10.750000 0.059567
+10.800000 0.058665
+10.850000 0.057826
+10.900000 0.057376
+10.950000 0.057786
+11.000000 0.058795
+11.050000 0.059940
+11.100000 0.061842
+11.150000 0.064198
+11.200000 0.066836
+11.250000 0.070179
+11.300000 0.073935
+11.350000 0.077158
+11.400000 0.080731
+11.450000 0.084741
+11.500000 0.088010
+11.550000 0.091109
+11.600000 0.094547
+11.650000 0.097528
+11.700000 0.099210
+11.750000 0.100417
+11.800000 0.101705
+11.850000 0.102529
+11.900000 0.102027
+11.950000 0.100855
+12.000000 0.099085
+12.050000 0.095680
+12.100000 0.091440
+12.150000 0.087339
+12.200000 0.083149
+12.250000 0.078717
+12.300000 0.074886
+12.350000 0.071271
+12.400000 0.067645
+12.450000 0.064773
+12.500000 0.062507
+12.550000 0.060263
+12.600000 0.058382
+12.650000 0.057585
+12.700000 0.057126
+12.750000 0.057070
+12.800000 0.057658
+12.850000 0.058691
+12.900000 0.059334
+12.950000 0.059509
+13.000000 0.059618
+13.050000 0.059345
+13.100000 0.058386
+13.150000 0.057191
+13.200000 0.056114
+13.250000 0.054575
+13.300000 0.052927
+13.350000 0.051738
+13.400000 0.050600
+13.450000 0.049282
+13.500000 0.048253
+13.550000 0.047208
+13.600000 0.045642
+13.650000 0.044001
+13.700000 0.042519
+13.750000 0.041212
+13.800000 0.040313
+13.850000 0.039621
+13.900000 0.039101
+13.950000 0.038527
+14.000000 0.037708
+14.050000 0.036955
+14.100000 0.036544
+14.150000 0.036096
+14.200000 0.035957
+14.250000 0.035664
+14.300000 0.034598
+14.350000 0.033428
+14.400000 0.032465
+14.450000 0.031208
+14.500000 0.029977
+14.550000 0.028878
+14.600000 0.027252
+14.650000 0.025142
+14.700000 0.022722
+14.750000 0.020359
+14.800000 0.018104
+14.850000 0.015886
+14.900000 0.013721
+14.950000 0.011781
+15.000000 0.009624
+15.050000 0.007280
+15.100000 0.004937
+15.150000 0.002109
+15.200000 -0.001338
+15.250000 -0.004734
+15.300000 -0.007767
+15.350000 -0.010692
+15.400000 -0.013063
+15.450000 -0.014837
+15.500000 -0.016602
+15.550000 -0.018552
+15.600000 -0.020288
+15.650000 -0.021743
+15.700000 -0.023000
+15.750000 -0.023968
+15.800000 -0.024539
+15.850000 -0.025155
+15.900000 -0.025963
+15.950000 -0.026697
+16.000000 -0.027423
+16.050000 -0.028134
+16.100000 -0.028578
+16.150000 -0.028775
+16.200000 -0.028780
+16.250000 -0.028491
+16.300000 -0.028373
+16.350000 -0.028271
+16.400000 -0.028100
+16.450000 -0.028036
+16.500000 -0.027841
+16.550000 -0.027185
+16.600000 -0.026266
+16.650000 -0.025237
+16.700000 -0.024364
+16.750000 -0.023895
+16.800000 -0.023610
+16.850000 -0.023480
+16.900000 -0.023443
+16.950000 -0.023266
+17.000000 -0.023122
+17.050000 -0.023154
+17.100000 -0.023414
+17.150000 -0.023926
+17.200000 -0.024531
+17.250000 -0.025166
+17.300000 -0.025979
+17.350000 -0.027118
+17.400000 -0.028479
+17.450000 -0.029681
+17.500000 -0.030910
+17.550000 -0.032390
+17.600000 -0.033369
+17.650000 -0.034119
+17.700000 -0.035665
+17.750000 -0.037267
+17.800000 -0.038271
+17.850000 -0.039555
+17.900000 -0.041022
+17.950000 -0.041773
+18.000000 -0.042027
+18.050000 -0.042390
+18.100000 -0.042613
+18.150000 -0.042262
+18.200000 -0.041632
+18.250000 -0.041441
+18.300000 -0.041244
+18.350000 -0.040475
+18.400000 -0.039702
+18.450000 -0.039047
+18.500000 -0.037657
+18.550000 -0.035694
+18.600000 -0.033918
+18.650000 -0.032164
+18.700000 -0.029990
+18.750000 -0.027870
+18.800000 -0.026073
+18.850000 -0.024095
+18.900000 -0.021732
+18.950000 -0.019556
+19.000000 -0.017478
+19.050000 -0.015092
+19.100000 -0.012703
+19.150000 -0.010575
+19.200000 -0.008562
+19.250000 -0.006694
+19.300000 -0.005121
+19.350000 -0.003754
+19.400000 -0.002673
+19.450000 -0.001792
+19.500000 -0.001015
+19.550000 -0.000515
+19.600000 -0.000276
+19.650000 0.000160
+19.700000 0.000661
+19.750000 0.000877
+19.800000 0.000936
+19.850000 0.000959
+19.900000 0.000626
+19.950000 0.000135
+20.000000 0.000085
+20.050000 0.000362
+20.100000 0.000663
+20.150000 0.001097
+20.200000 0.001636
+20.250000 0.001786
+20.300000 0.001767
+20.350000 0.002008
+20.400000 0.002182
+20.450000 0.002201
+20.500000 0.002312
+20.550000 0.002479
+20.600000 0.002467
+20.650000 0.002548
+20.700000 0.002878
+20.750000 0.003337
+20.800000 0.003584
+20.850000 0.003763
+20.900000 0.003955
+20.950000 0.003560
+21.000000 0.002917
+21.050000 0.002792
+21.100000 0.002932
+21.150000 0.002773
+21.200000 0.003023
+21.250000 0.003635
+21.300000 0.003540
+21.350000 0.002693
+21.400000 0.002342
+21.450000 0.002191
+21.500000 0.001539
+21.550000 0.001278
+21.600000 0.001575
+21.650000 0.001337
+21.700000 0.000724
+21.750000 0.000617
+21.800000 0.000532
+21.850000 0.000401
+21.900000 0.000646
+21.950000 0.001069
+22.000000 0.001089
+22.050000 0.000980
+22.100000 0.000839
+22.150000 0.000514
+22.200000 0.000182
+22.250000 -0.000131
+22.300000 -0.000348
+22.350000 -0.000441
+22.400000 -0.000463
+22.450000 -0.000382
+22.500000 -0.000054
+22.550000 0.000057
+22.600000 -0.000188
+22.650000 -0.000427
+22.700000 -0.000554
+22.750000 -0.000882
+22.800000 -0.001113
+22.850000 -0.001003
+22.900000 -0.001295
+22.950000 -0.002056
+23.000000 -0.002604
+23.050000 -0.003224
+23.100000 -0.003994
+23.150000 -0.004307
+23.200000 -0.004579
+23.250000 -0.005079
+23.300000 -0.005311
+23.350000 -0.005481
+23.400000 -0.005792
+23.450000 -0.005694
+23.500000 -0.005466
+23.550000 -0.005591
+23.600000 -0.005974
+23.650000 -0.006279
+23.700000 -0.006576
+23.750000 -0.006769
+23.800000 -0.006761
+23.850000 -0.006327
+23.900000 -0.005959
+23.950000 -0.006260
+24.000000 -0.006760
+24.050000 -0.007036
+24.100000 -0.007294
+24.150000 -0.007289
+24.200000 -0.006701
+24.250000 -0.006294
+24.300000 -0.006167
+24.350000 -0.005997
+24.400000 -0.006005
+24.450000 -0.006204
+24.500000 -0.006027
+24.550000 -0.005701
+24.600000 -0.005667
+24.650000 -0.005701
+24.700000 -0.005318
+24.750000 -0.004648
+24.800000 -0.004175
+24.850000 -0.003702
+24.900000 -0.003042
+24.950000 -0.002860
+25.000000 -0.003163
+25.050000 -0.003123
+25.100000 -0.002996
+25.150000 -0.003042
+25.200000 -0.002752
+25.250000 -0.002417
+25.300000 -0.002531
+25.350000 -0.002571
+25.400000 -0.002640
+25.450000 -0.002946
+25.500000 -0.002870
+25.550000 -0.002347
+25.600000 -0.001896
+25.650000 -0.001100
+25.700000 -0.000110
+25.750000 0.000411
+25.800000 0.000671
+25.850000 0.000965
+25.900000 0.000969
+25.950000 0.000770
+26.000000 0.000900
+26.050000 0.001112
+26.100000 0.001184
+26.150000 0.001271
+26.200000 0.001574
+26.250000 0.001851
+26.300000 0.002273
+26.350000 0.002721
+26.400000 0.002833
+26.450000 0.002653
+26.500000 0.002250
+26.550000 0.001542
+26.600000 0.001121
+26.650000 0.001380
+26.700000 0.001720
+26.750000 0.002098
+26.800000 0.002505
+26.850000 0.002729
+26.900000 0.002877
+26.950000 0.003011
+27.000000 0.002977
+27.050000 0.003128
+27.100000 0.002976
+27.150000 0.002215
+27.200000 0.001760
+27.250000 0.001778
+27.300000 0.001603
+27.350000 0.001872
+27.400000 0.002561
+27.450000 0.002636
+27.500000 0.002546
+27.550000 0.002568
+27.600000 0.002279
+27.650000 0.001964
+27.700000 0.001991
+27.750000 0.001902
+27.800000 0.001795
+27.850000 0.001679
+27.900000 0.001613
+27.950000 0.001788
+28.000000 0.001783
+28.050000 0.001822
+28.100000 0.002227
+28.150000 0.002399
+28.200000 0.002237
+28.250000 0.002450
+28.300000 0.002672
+28.350000 0.002366
+28.400000 0.002053
+28.450000 0.001687
+28.500000 0.000949
+28.550000 0.000347
+28.600000 0.000313
+28.650000 0.000324
+28.700000 0.000528
+28.750000 0.000908
+28.800000 0.000733
+28.850000 0.000240
+28.900000 -0.000162
+28.950000 -0.000584
+29.000000 -0.000594
+29.050000 -0.000131
+29.100000 0.000138
+29.150000 0.000597
+29.200000 0.000867
+29.250000 0.000387
+29.300000 0.000032
+29.350000 0.000092
+29.400000 -0.000125
+29.450000 -0.000204
+29.500000 0.000058
+29.550000 -0.000011
+29.600000 -0.000368
+29.650000 -0.000739
+29.700000 -0.001204
+29.750000 -0.001620
+29.800000 -0.001794
+29.850000 -0.001766
+29.900000 -0.001461
+29.950000 -0.001032
+30.000000 -0.000640
+30.050000 -0.000549
+30.100000 -0.000921
+30.150000 -0.001488
+30.200000 -0.001787
+30.250000 -0.001853
+30.300000 -0.001843
+30.350000 -0.001400
+30.400000 -0.000801
+30.450000 -0.000486
+30.500000 -0.000548
+30.550000 -0.000570
+30.600000 -0.000636
+30.650000 -0.000894
+30.700000 -0.001041
+30.750000 -0.001058
+30.800000 -0.000941
+30.850000 -0.000816
+30.900000 -0.000837
+30.950000 -0.001118
+31.000000 -0.001210
+31.050000 -0.001345
+31.100000 -0.001504
+31.150000 -0.001425
+31.200000 -0.001342
+31.250000 -0.001496
+31.300000 -0.001541
+31.350000 -0.001461
+31.400000 -0.001330
+31.450000 -0.000932
+31.500000 -0.000439
+31.550000 -0.000187
+31.600000 -0.000355
+31.650000 -0.000755
+31.700000 -0.001214
+31.750000 -0.001599
+31.800000 -0.001676
+31.850000 -0.001112
+31.900000 -0.000327
+31.950000 0.000056
+32.000000 0.000078
+32.050000 -0.000201
+32.100000 -0.000841
+32.150000 -0.001209
+32.200000 -0.000949
+32.250000 -0.000452
+32.300000 0.000014
+32.350000 0.000234
+32.400000 -0.000083
+32.450000 -0.000550
+32.500000 -0.000782
+32.550000 -0.000712
+32.600000 -0.000385
+32.650000 0.000042
+32.700000 0.000284
+32.750000 0.000200
+32.800000 -0.000200
+32.850000 -0.000478
+32.900000 -0.000490
+32.950000 -0.000467
+33.000000 -0.000212
+33.050000 0.000355
+33.100000 0.000694
+33.150000 0.000656
+33.200000 0.000519
+33.250000 0.000191
+33.300000 -0.000178
+33.350000 -0.000329
+33.400000 -0.000137
+33.450000 0.000233
+33.500000 0.000715
+33.550000 0.000841
+33.600000 0.000771
+33.650000 0.000722
+33.700000 0.000626
+33.750000 0.000557
+33.800000 0.000893
+33.850000 0.001244
+33.900000 0.001064
+33.950000 0.000828
+34.000000 0.000392
+34.050000 -0.000092
+34.100000 -0.000131
+34.150000 0.000212
+34.200000 0.000638
+34.250000 0.001186
+34.300000 0.001267
+34.350000 0.000849
+34.400000 0.000571
+34.450000 0.000502
+34.500000 0.000777
+34.550000 0.001379
+34.600000 0.001912
+34.650000 0.002186
+34.700000 0.001855
+34.750000 0.001061
+34.800000 0.000641
+34.850000 0.000645
+34.900000 0.000537
+34.950000 0.000521
+35.000000 0.000519
+35.050000 0.000123
+35.100000 -0.000317
+35.150000 -0.000195
+35.200000 0.000394
+35.250000 0.000994
+35.300000 0.001277
+35.350000 0.000973
+35.400000 -0.000032
+35.450000 -0.001371
+35.500000 -0.002368
+35.550000 -0.002889
+35.600000 -0.002996
+35.650000 -0.002547
+35.700000 -0.001828
+35.750000 -0.001754
+35.800000 -0.001724
+35.850000 -0.001725
+35.900000 -0.002285
+35.950000 -0.002187
diff --git a/mrdna/arbdmodel/resources/two_bead_model/b1p1p2b2.dat b/mrdna/arbdmodel/resources/two_bead_model/b1p1p2b2.dat
new file mode 100644
index 0000000000000000000000000000000000000000..2de9010d7eae2a28a49fc3f4cc4d5836369c67b8
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/b1p1p2b2.dat
@@ -0,0 +1,180 @@
+-180 0.000000
+-178 0.003547
+-176 0.016729
+-174 0.038303
+-172 0.054197
+-170 0.075078
+-168 0.094803
+-166 0.124236
+-164 0.146264
+-162 0.161759
+-160 0.175379
+-158 0.190514
+-156 0.221612
+-154 0.255380
+-152 0.295495
+-150 0.336600
+-148 0.374582
+-146 0.415345
+-144 0.450182
+-142 0.493300
+-140 0.524948
+-138 0.557526
+-136 0.571719
+-134 0.599484
+-132 0.617191
+-130 0.633863
+-128 0.642162
+-126 0.645014
+-124 0.661808
+-122 0.672262
+-120 0.687925
+-118 0.689490
+-116 0.695598
+-114 0.706429
+-112 0.720593
+-110 0.724054
+-108 0.722679
+-106 0.735235
+-104 0.756678
+-102 0.772185
+-100 0.761144
+-98 0.768496
+-96 0.788540
+-94 0.814494
+-92 0.813217
+-90 0.804436
+-88 0.823384
+-86 0.829135
+-84 0.833188
+-82 0.803780
+-80 0.809289
+-78 0.801121
+-76 0.795961
+-74 0.761121
+-72 0.752159
+-70 0.749570
+-68 0.757284
+-66 0.756099
+-64 0.773139
+-62 0.792474
+-60 0.817154
+-58 0.820884
+-56 0.828516
+-54 0.825517
+-52 0.830145
+-50 0.824465
+-48 0.793216
+-46 0.756700
+-44 0.717598
+-42 0.686690
+-40 0.635146
+-38 0.579489
+-36 0.529578
+-34 0.487427
+-32 0.441791
+-30 0.410630
+-28 0.363954
+-26 0.331759
+-24 0.287989
+-22 0.255710
+-20 0.220427
+-18 0.192322
+-16 0.188362
+-14 0.171696
+-12 0.155880
+-10 0.133632
+-8 0.127354
+-6 0.112549
+-4 0.108758
+-2 0.096779
+0 0.105214
+2 0.083904
+4 0.086698
+6 0.067618
+8 0.075622
+10 0.058251
+12 0.052912
+14 0.029581
+16 0.026614
+18 0.013083
+20 0.015368
+22 0.015046
+24 0.043876
+26 0.084343
+28 0.132484
+30 0.178405
+32 0.222154
+34 0.266006
+36 0.315545
+38 0.352464
+40 0.382110
+42 0.395804
+44 0.420171
+46 0.429670
+48 0.445955
+50 0.451667
+52 0.481346
+54 0.481657
+56 0.488321
+58 0.471293
+60 0.495145
+62 0.511544
+64 0.546675
+66 0.558790
+68 0.584652
+70 0.606381
+72 0.632478
+74 0.654483
+76 0.675674
+78 0.697465
+80 0.700044
+82 0.708669
+84 0.696179
+86 0.717010
+88 0.709777
+90 0.725676
+92 0.696947
+94 0.703244
+96 0.689063
+98 0.679205
+100 0.648855
+102 0.632894
+104 0.622370
+106 0.592898
+108 0.552428
+110 0.519473
+112 0.489779
+114 0.461324
+116 0.418165
+118 0.390513
+120 0.357452
+122 0.336976
+124 0.312365
+126 0.296113
+128 0.282085
+130 0.273378
+132 0.263460
+134 0.256957
+136 0.242814
+138 0.243046
+140 0.235983
+142 0.239902
+144 0.233642
+146 0.231855
+148 0.235724
+150 0.234076
+152 0.235153
+154 0.217141
+156 0.211632
+158 0.203141
+160 0.201911
+162 0.185515
+164 0.163511
+166 0.143503
+168 0.139183
+170 0.140224
+172 0.126104
+174 0.079707
+176 0.031311
+178.000000 0.031311
diff --git a/mrdna/arbdmodel/resources/two_bead_model/b1p2b2.dat b/mrdna/arbdmodel/resources/two_bead_model/b1p2b2.dat
new file mode 100644
index 0000000000000000000000000000000000000000..a45cf2361a90605bc8ad1557cc2853aa3449f63d
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/b1p2b2.dat
@@ -0,0 +1,181 @@
+0.000000 17.538194
+1.000000 17.034724
+2.000000 16.537679
+3.000000 16.047059
+4.000000 15.562865
+5.000000 15.085096
+6.000000 14.613752
+7.000000 14.148834
+8.000000 13.690341
+9.000000 13.238273
+10.000000 12.792630
+11.000000 12.353413
+12.000000 11.920621
+13.000000 11.494254
+14.000000 11.074313
+15.000000 10.660797
+16.000000 10.253706
+17.000000 9.853041
+18.000000 9.458800
+19.000000 9.070986
+20.000000 8.689596
+21.000000 8.314632
+22.000000 7.946093
+23.000000 7.583979
+24.000000 7.228291
+25.000000 6.879028
+26.000000 6.536190
+27.000000 6.199777
+28.000000 5.869790
+29.000000 5.546228
+30.000000 5.229092
+31.000000 4.918381
+32.000000 4.614095
+33.000000 4.316234
+34.000000 3.806707
+35.000000 2.954714
+36.000000 2.119496
+37.000000 1.484069
+38.000000 0.993087
+39.000000 0.548407
+40.000000 0.369759
+41.000000 0.192132
+42.000000 0.145575
+43.000000 0.095968
+44.000000 0.083428
+45.000000 0.087676
+46.000000 0.095483
+47.000000 0.122671
+48.000000 0.154197
+49.000000 0.197335
+50.000000 0.244267
+51.000000 0.296646
+52.000000 0.350020
+53.000000 0.397607
+54.000000 0.441432
+55.000000 0.473952
+56.000000 0.500029
+57.000000 0.512186
+58.000000 0.524402
+59.000000 0.525312
+60.000000 0.524072
+61.000000 0.510210
+62.000000 0.492930
+63.000000 0.455456
+64.000000 0.412280
+65.000000 0.356949
+66.000000 0.299068
+67.000000 0.235316
+68.000000 0.176487
+69.000000 0.122374
+70.000000 0.075741
+71.000000 0.039658
+72.000000 0.014055
+73.000000 0.003231
+74.000000 0.000000
+75.000000 0.006278
+76.000000 0.015080
+77.000000 0.026069
+78.000000 0.033686
+79.000000 0.038490
+80.000000 0.039174
+81.000000 0.036846
+82.000000 0.032876
+83.000000 0.027819
+84.000000 0.023283
+85.000000 0.019850
+86.000000 0.017531
+87.000000 0.017587
+88.000000 0.019421
+89.000000 0.023789
+90.000000 0.030239
+91.000000 0.040499
+92.000000 0.051804
+93.000000 0.064916
+94.000000 0.078963
+95.000000 0.093503
+96.000000 0.106960
+97.000000 0.120962
+98.000000 0.135671
+99.000000 0.150160
+100.000000 0.165057
+101.000000 0.180167
+102.000000 0.194258
+103.000000 0.205118
+104.000000 0.214043
+105.000000 0.220161
+106.000000 0.225518
+107.000000 0.229589
+108.000000 0.235064
+109.000000 0.239460
+110.000000 0.242454
+111.000000 0.241107
+112.000000 0.237028
+113.000000 0.227607
+114.000000 0.216593
+115.000000 0.204712
+116.000000 0.193994
+117.000000 0.183320
+118.000000 0.173952
+119.000000 0.164991
+120.000000 0.156581
+121.000000 0.147382
+122.000000 0.137978
+123.000000 0.130674
+124.000000 0.125233
+125.000000 0.120604
+126.000000 0.117163
+127.000000 0.116731
+128.000000 0.116789
+129.000000 0.115846
+130.000000 0.114941
+131.000000 0.116333
+132.000000 0.117292
+133.000000 0.118821
+134.000000 0.121876
+135.000000 0.127859
+136.000000 0.133718
+137.000000 0.141854
+138.000000 0.151224
+139.000000 0.162949
+140.000000 0.174307
+141.000000 0.188553
+142.000000 0.203352
+143.000000 0.219566
+144.000000 0.236117
+145.000000 0.256143
+146.000000 0.278011
+147.000000 0.301682
+148.000000 0.325801
+149.000000 0.350672
+150.000000 0.374052
+151.000000 0.394953
+152.000000 0.416527
+153.000000 0.439472
+154.000000 0.461816
+155.000000 0.484143
+156.000000 0.507627
+157.000000 0.529360
+158.000000 0.550997
+159.000000 0.573984
+160.000000 0.595983
+161.000000 0.616158
+162.000000 0.635858
+163.000000 0.653707
+164.000000 0.671868
+165.000000 0.692008
+166.000000 0.713032
+167.000000 0.734558
+168.000000 0.758863
+169.000000 0.782046
+170.000000 0.805286
+171.000000 0.827232
+172.000000 0.851115
+173.000000 0.877310
+174.000000 0.911813
+175.000000 0.962761
+176.000000 1.019321
+177.000000 1.082195
+178.000000 1.049049
+179.000000 1.082195
+180 0
diff --git a/mrdna/arbdmodel/resources/two_bead_model/b1p2p3.dat b/mrdna/arbdmodel/resources/two_bead_model/b1p2p3.dat
new file mode 100644
index 0000000000000000000000000000000000000000..01ab3c86254a92f5dae48cb857a9f7ddd886eeb5
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/b1p2p3.dat
@@ -0,0 +1,181 @@
+0.000000 14.449978
+1.000000 14.059926
+2.000000 13.676299
+3.000000 13.299097
+4.000000 12.928321
+5.000000 12.563970
+6.000000 12.206045
+7.000000 11.854544
+8.000000 11.509469
+9.000000 11.170819
+10.000000 10.838595
+11.000000 10.512796
+12.000000 10.193422
+13.000000 9.880473
+14.000000 9.573950
+15.000000 9.273852
+16.000000 8.980180
+17.000000 8.692932
+18.000000 8.412110
+19.000000 8.137714
+20.000000 7.869742
+21.000000 7.608196
+22.000000 7.353075
+23.000000 7.104380
+24.000000 6.862109
+25.000000 6.626265
+26.000000 6.396845
+27.000000 6.173851
+28.000000 5.957282
+29.000000 5.747138
+30.000000 5.543419
+31.000000 5.346126
+32.000000 5.155258
+33.000000 4.970816
+34.000000 4.792799
+35.000000 4.621207
+36.000000 4.456040
+37.000000 4.297299
+38.000000 4.144983
+39.000000 3.999092
+40.000000 3.859627
+41.000000 3.726587
+42.000000 3.599972
+43.000000 3.479782
+44.000000 3.277497
+45.000000 2.909279
+46.000000 2.560472
+47.000000 2.256878
+48.000000 1.992511
+49.000000 1.728181
+50.000000 1.544465
+51.000000 1.338588
+52.000000 1.191175
+53.000000 1.037944
+54.000000 0.919058
+55.000000 0.798818
+56.000000 0.698569
+57.000000 0.598702
+58.000000 0.516034
+59.000000 0.445441
+60.000000 0.391673
+61.000000 0.351549
+62.000000 0.324396
+63.000000 0.306633
+64.000000 0.293318
+65.000000 0.280971
+66.000000 0.269533
+67.000000 0.257267
+68.000000 0.244555
+69.000000 0.227755
+70.000000 0.210386
+71.000000 0.187538
+72.000000 0.162757
+73.000000 0.132864
+74.000000 0.104891
+75.000000 0.077857
+76.000000 0.054462
+77.000000 0.035647
+78.000000 0.021615
+79.000000 0.011533
+80.000000 0.003716
+81.000000 0.000760
+82.000000 0.000000
+83.000000 0.004569
+84.000000 0.012167
+85.000000 0.024485
+86.000000 0.038211
+87.000000 0.053191
+88.000000 0.068004
+89.000000 0.080471
+90.000000 0.090841
+91.000000 0.098010
+92.000000 0.103224
+93.000000 0.103397
+94.000000 0.102354
+95.000000 0.097664
+96.000000 0.091689
+97.000000 0.083907
+98.000000 0.076637
+99.000000 0.068455
+100.000000 0.060554
+101.000000 0.053706
+102.000000 0.046018
+103.000000 0.040320
+104.000000 0.035994
+105.000000 0.036001
+106.000000 0.037570
+107.000000 0.045206
+108.000000 0.054704
+109.000000 0.068068
+110.000000 0.081956
+111.000000 0.098384
+112.000000 0.114486
+113.000000 0.130940
+114.000000 0.147084
+115.000000 0.162674
+116.000000 0.177514
+117.000000 0.190085
+118.000000 0.201906
+119.000000 0.210823
+120.000000 0.219277
+121.000000 0.224738
+122.000000 0.228909
+123.000000 0.230362
+124.000000 0.229838
+125.000000 0.225304
+126.000000 0.219223
+127.000000 0.213872
+128.000000 0.209626
+129.000000 0.208391
+130.000000 0.209517
+131.000000 0.214894
+132.000000 0.220459
+133.000000 0.227561
+134.000000 0.234607
+135.000000 0.244653
+136.000000 0.254617
+137.000000 0.267264
+138.000000 0.281944
+139.000000 0.299245
+140.000000 0.316626
+141.000000 0.334886
+142.000000 0.353658
+143.000000 0.370838
+144.000000 0.385844
+145.000000 0.400072
+146.000000 0.416387
+147.000000 0.431068
+148.000000 0.444976
+149.000000 0.459585
+150.000000 0.474787
+151.000000 0.484453
+152.000000 0.493930
+153.000000 0.503986
+154.000000 0.513729
+155.000000 0.519869
+156.000000 0.525045
+157.000000 0.526257
+158.000000 0.525143
+159.000000 0.520598
+160.000000 0.516519
+161.000000 0.513600
+162.000000 0.512914
+163.000000 0.511084
+164.000000 0.508302
+165.000000 0.502939
+166.000000 0.493850
+167.000000 0.481639
+168.000000 0.468229
+169.000000 0.456657
+170.000000 0.448113
+171.000000 0.442535
+172.000000 0.436879
+173.000000 0.440960
+174.000000 0.451027
+175.000000 0.471857
+176.000000 0.502545
+177.000000 0.540357
+178.000000 0.521704
+179.000000 0.540357
+180 0
diff --git a/mrdna/arbdmodel/resources/two_bead_model/b1p2p3b3.dat b/mrdna/arbdmodel/resources/two_bead_model/b1p2p3b3.dat
new file mode 100644
index 0000000000000000000000000000000000000000..db19f2b2bef928cf42db1342a8903a5fa9887bfc
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/b1p2p3b3.dat
@@ -0,0 +1,180 @@
+-180 0.546254
+-178 0.545076
+-176 0.548714
+-174 0.564344
+-172 0.568003
+-170 0.569708
+-168 0.558287
+-166 0.572342
+-164 0.572642
+-162 0.580926
+-160 0.572663
+-158 0.585110
+-156 0.593464
+-154 0.601585
+-152 0.604438
+-150 0.597779
+-148 0.607291
+-146 0.620330
+-144 0.630385
+-142 0.631124
+-140 0.627139
+-138 0.648344
+-136 0.653787
+-134 0.662011
+-132 0.652076
+-130 0.654936
+-128 0.653171
+-126 0.655776
+-124 0.649238
+-122 0.650451
+-120 0.642695
+-118 0.654793
+-116 0.646153
+-114 0.639905
+-112 0.629721
+-110 0.629359
+-108 0.635729
+-106 0.623112
+-104 0.611951
+-102 0.609412
+-100 0.605387
+-98 0.605556
+-96 0.593933
+-94 0.597092
+-92 0.593028
+-90 0.577847
+-88 0.563364
+-86 0.550125
+-84 0.550260
+-82 0.537074
+-80 0.526167
+-78 0.510400
+-76 0.504323
+-74 0.486962
+-72 0.467010
+-70 0.436045
+-68 0.424295
+-66 0.409309
+-64 0.396029
+-62 0.365126
+-60 0.345471
+-58 0.335052
+-56 0.327220
+-54 0.313903
+-52 0.291803
+-50 0.278595
+-48 0.267812
+-46 0.263537
+-44 0.261254
+-42 0.246196
+-40 0.243729
+-38 0.233491
+-36 0.247274
+-34 0.230597
+-32 0.229480
+-30 0.204199
+-28 0.203618
+-26 0.166309
+-24 0.143323
+-22 0.115655
+-20 0.106143
+-18 0.091421
+-16 0.067129
+-14 0.055254
+-12 0.047988
+-10 0.044531
+-8 0.040411
+-6 0.029117
+-4 0.020956
+-2 0.006409
+0 0.002154
+2 0.001387
+4 0.000269
+6 0.000000
+8 0.000080
+10 0.010572
+12 0.010622
+14 0.013736
+16 0.017045
+18 0.033739
+20 0.048157
+22 0.060371
+24 0.073661
+26 0.102425
+28 0.121034
+30 0.146200
+32 0.157730
+34 0.183955
+36 0.193021
+38 0.205705
+40 0.208412
+42 0.230895
+44 0.243342
+46 0.260527
+48 0.261798
+50 0.268291
+52 0.281542
+54 0.289614
+56 0.301048
+58 0.304241
+60 0.308697
+62 0.321239
+64 0.331523
+66 0.360957
+68 0.378023
+70 0.403674
+72 0.418397
+74 0.436186
+76 0.458524
+78 0.472007
+80 0.485402
+82 0.488541
+84 0.496830
+86 0.511168
+88 0.519624
+90 0.534245
+92 0.537758
+94 0.540560
+96 0.545529
+98 0.552555
+100 0.562928
+102 0.561080
+104 0.563666
+106 0.573167
+108 0.578486
+110 0.578920
+112 0.565700
+114 0.576042
+116 0.575288
+118 0.583509
+120 0.577520
+122 0.576253
+124 0.574493
+126 0.565240
+128 0.571560
+130 0.565958
+132 0.560775
+134 0.543710
+136 0.548994
+138 0.549055
+140 0.551426
+142 0.535725
+144 0.540487
+146 0.535907
+148 0.544173
+150 0.535025
+152 0.536973
+154 0.527365
+156 0.525082
+158 0.524349
+160 0.530925
+162 0.529991
+164 0.528378
+166 0.525491
+168 0.535666
+170 0.541837
+172 0.538046
+174 0.538587
+176 0.538206
+178.000000 0.538206
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.hydropro-pri.bea b/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.hydropro-pri.bea
new file mode 100644
index 0000000000000000000000000000000000000000..bd893784794cf6012e3f27e0b773a7c01fa40af9
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.hydropro-pri.bea
@@ -0,0 +1,14 @@
+ATOM      1  O                   0.670  -0.235 -37.199
+ATOM      2  O                   1.321   0.042 -37.278
+ATOM      3  O                   1.422   0.542 -36.822
+ATOM      4  O                   1.295   1.186 -37.112
+ATOM      5  O                   0.690   1.467 -37.071
+ATOM      6  O                   1.800   1.509 -37.397
+ATOM      7  O                   2.350   1.291 -37.430
+ATOM      8  O                   1.654   2.115 -37.618
+ATOM      9  O                   1.092   2.451 -37.506
+ATOM     10  O                   1.086   3.040 -37.581
+ATOM     11  O                   0.564   2.069 -37.268
+ATOM     12  O                  -0.081   2.373 -37.150
+ATOM     13  O                   1.005   0.362 -36.249
+ATOM     14  O                   0.859   0.785 -35.953
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.hydropro-pri.vrml b/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.hydropro-pri.vrml
new file mode 100644
index 0000000000000000000000000000000000000000..f9c9ba05346311deef19065f198bb48eaf7153eb
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.hydropro-pri.vrml
@@ -0,0 +1,127 @@
+#VRML V2.0 utf8
+Transform {
+  translation  -0.12224E+01  -0.25392E+00  -0.58241E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation  -0.10178E+01   0.25926E+00  -0.37039E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation  -0.73304E+00   0.17242E+00   0.11453E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation  -0.14615E+00   0.13759E+00   0.16219E-01
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation   0.99249E-01  -0.35207E+00  -0.75146E-01
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation   0.15180E+00   0.60146E+00   0.42776E-01
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation  -0.42013E-01   0.10435E+01   0.13816E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation   0.69385E+00   0.53262E+00  -0.19950E-01
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation   0.96370E+00   0.51111E-01  -0.33400E-01
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation   0.14501E+01   0.44458E-01   0.50102E-01
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation   0.63121E+00  -0.41294E+00  -0.11540E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation   0.87832E+00  -0.95904E+00  -0.15844E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation  -0.99025E+00  -0.32059E+00   0.36061E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation  -0.71657E+00  -0.54383E+00   0.63269E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.11637E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.hydropro-res.txt b/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.hydropro-res.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a5e9c255a081dc9fc427de93fc4d9d78441e2188
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.hydropro-res.txt
@@ -0,0 +1,190 @@
+      ------------------------------------------------------------
+                 HYDROPRO, Version 10, September 2011   
+              A. Ortega, D. Amoros, J. Garcia de la Torre, 
+      "Prediction of hydrodynamic and other solution properties of 
+          rigid proteins from atomic- and residue-level models" 
+                Biophys. J. 101, 892-898 (2011). 
+      ------------------------------------------------------------
+
+
+                          SUMMARY OF DATA AND RESULTS
+  
+                            This file : b-bead.hydropro-res.txt       
+                                 Case : b                        !Name
+                      Structural file : b-bead.pdb                    
+  
+  Radius of elements in primary model : 2.90 Angs.
+         Type of hydropro calculation : 1
+  
+                           Temperature:  22.0 centigrade
+                     Solvent viscosity:  0.01000 poise
+                      Molecular weight:      181. Da
+        Solute partial specific volume: 1.000 cm^3/g
+                      Solution density: 1.000 g/cm^3
+  
+   Translational diffusion coefficient:  4.137E-06 cm^2/s
+                    Radius of gyration:  4.262E-08 cm
+                                Volume:  4.295E-22 cm^3
+      Rotational diffusion coefficient:  1.302E+09 s^-1
+                   Relaxation time (1):  1.890E-10 s
+                   Relaxation time (2):  1.765E-10 s
+                   Relaxation time (3):  1.743E-10 s
+                   Relaxation time (4):  1.424E-10 s
+                   Relaxation time (5):  1.430E-10 s
+      Harmonic mean (correlation) time:  1.628E-10 s
+                   Intrinsic viscosity:  5.274E+00 cm^3/g
+             Sedimentation coefficient:  0.000E+00 Svedberg
+  
+
+
+               Center of diffusion (x):  5.113E-08 cm
+               Center of diffusion (x):  6.380E-08 cm
+               Center of diffusion (x):  3.871E-08 cm
+
+           Generalized (6x6) diffusion matrix:  (Dtt  Dtr)
+
+                                                (Drt  Drr)
+
+
+  4.334E-06  1.273E-09 -3.350E-08     4.491E-01 -1.381E-01 -1.107E-01
+  1.261E-09  4.555E-06 -8.120E-08    -1.380E-01 -3.259E-01  2.473E-01
+ -3.347E-08 -8.122E-08  4.229E-06    -1.108E-01  2.471E-01 -2.012E-01
+
+
+  4.491E-01 -1.380E-01 -1.108E-01     1.211E+09 -2.254E+07 -1.629E+07
+ -1.381E-01 -3.259E-01  2.471E-01    -2.254E+07  1.561E+09 -9.402E+07
+ -1.107E-01  2.473E-01 -2.012E-01    -1.629E+07 -9.402E+07  1.133E+09
+
+                        List of equivalent radii
+
+                         Translational:  5.225E-08
+                             Gyration :  5.502E-08
+                               Volume :  4.680E-08
+                          Rotation (1):  5.686E-08
+                          Rotation (2):  5.558E-08
+                          Rotation (3):  5.535E-08
+                          Rotation (4):  5.174E-08
+                          Rotation (5):  5.181E-08
+                          Rotation (h):  5.083E-08
+                   Intrinsic viscosity:  5.329E-08
+                      Longest distance:  6.342E-08
+  
+                     Longest distance :  1.268E-07 cm
+
+
+
+                Calculation of scattering form factor, P vs h
+                                  h           P(h)
+                           0.00E+00       1.04E+00
+                           3.51E+06       1.03E+00
+                           7.02E+06       1.02E+00
+                           1.05E+07       9.94E-01
+                           1.40E+07       9.64E-01
+                           1.76E+07       9.26E-01
+                           2.11E+07       8.81E-01
+                           2.46E+07       8.31E-01
+                           2.81E+07       7.78E-01
+                           3.16E+07       7.21E-01
+                           3.51E+07       6.62E-01
+                           3.86E+07       6.03E-01
+                           4.21E+07       5.45E-01
+                           4.56E+07       4.88E-01
+                           4.91E+07       4.33E-01
+                           5.27E+07       3.82E-01
+                           5.62E+07       3.34E-01
+                           5.97E+07       2.90E-01
+                           6.32E+07       2.50E-01
+                           6.67E+07       2.14E-01
+                           7.02E+07       1.83E-01
+                           7.37E+07       1.55E-01
+                           7.72E+07       1.31E-01
+                           8.07E+07       1.11E-01
+                           8.42E+07       9.39E-02
+                           8.78E+07       7.95E-02
+                           9.13E+07       6.75E-02
+                           9.48E+07       5.75E-02
+                           9.83E+07       4.94E-02
+                           1.02E+08       4.27E-02
+                           1.05E+08       3.72E-02
+                           1.09E+08       3.28E-02
+                           1.12E+08       2.91E-02
+                           1.16E+08       2.60E-02
+                           1.19E+08       2.35E-02
+                           1.23E+08       2.14E-02
+                           1.26E+08       1.97E-02
+                           1.30E+08       1.82E-02
+                           1.33E+08       1.70E-02
+                           1.37E+08       1.59E-02
+                           1.40E+08       1.50E-02
+                           1.44E+08       1.42E-02
+                           1.47E+08       1.35E-02
+                           1.51E+08       1.29E-02
+                           1.54E+08       1.24E-02
+                           1.58E+08       1.20E-02
+                           1.61E+08       1.15E-02
+                           1.65E+08       1.11E-02
+                           1.68E+08       1.08E-02
+                           1.72E+08       1.04E-02
+                           1.76E+08       1.01E-02
+
+
+                          Distribution of distances
+
+         50 intervals between RMIN and RMAX centered at R; 
+                          Values of p(R)
+
+
+        RMIN(cm)    RMAX(cm)     R(cm)    p(R)(cm^(-1))
+        0.000E+00   2.537E-09   1.268E-09   4.271E+05
+        2.537E-09   5.074E-09   3.805E-09   1.509E+06
+        5.074E-09   7.611E-09   6.342E-09   2.871E+06
+        7.611E-09   1.015E-08   8.879E-09   4.478E+06
+        1.015E-08   1.268E-08   1.142E-08   6.284E+06
+        1.268E-08   1.522E-08   1.395E-08   8.228E+06
+        1.522E-08   1.776E-08   1.649E-08   1.024E+07
+        1.776E-08   2.029E-08   1.903E-08   1.227E+07
+        2.029E-08   2.283E-08   2.156E-08   1.423E+07
+        2.283E-08   2.537E-08   2.410E-08   1.606E+07
+        2.537E-08   2.791E-08   2.664E-08   1.770E+07
+        2.791E-08   3.044E-08   2.917E-08   1.908E+07
+        3.044E-08   3.298E-08   3.171E-08   2.017E+07
+        3.298E-08   3.552E-08   3.425E-08   2.093E+07
+        3.552E-08   3.805E-08   3.678E-08   2.135E+07
+        3.805E-08   4.059E-08   3.932E-08   2.141E+07
+        4.059E-08   4.313E-08   4.186E-08   2.113E+07
+        4.313E-08   4.566E-08   4.439E-08   2.052E+07
+        4.566E-08   4.820E-08   4.693E-08   1.963E+07
+        4.820E-08   5.074E-08   4.947E-08   1.850E+07
+        5.074E-08   5.327E-08   5.201E-08   1.720E+07
+        5.327E-08   5.581E-08   5.454E-08   1.580E+07
+        5.581E-08   5.835E-08   5.708E-08   1.439E+07
+        5.835E-08   6.088E-08   5.962E-08   1.302E+07
+        6.088E-08   6.342E-08   6.215E-08   1.163E+07
+        6.342E-08   6.596E-08   6.469E-08   1.026E+07
+        6.596E-08   6.850E-08   6.723E-08   8.950E+06
+        6.850E-08   7.103E-08   6.976E-08   7.711E+06
+        7.103E-08   7.357E-08   7.230E-08   6.558E+06
+        7.357E-08   7.611E-08   7.484E-08   5.501E+06
+        7.611E-08   7.864E-08   7.737E-08   4.552E+06
+        7.864E-08   8.118E-08   7.991E-08   3.718E+06
+        8.118E-08   8.372E-08   8.245E-08   2.992E+06
+        8.372E-08   8.625E-08   8.498E-08   2.363E+06
+        8.625E-08   8.879E-08   8.752E-08   1.826E+06
+        8.879E-08   9.133E-08   9.006E-08   1.380E+06
+        9.133E-08   9.386E-08   9.260E-08   1.019E+06
+        9.386E-08   9.640E-08   9.513E-08   7.328E+05
+        9.640E-08   9.894E-08   9.767E-08   5.114E+05
+        9.894E-08   1.015E-07   1.002E-07   3.460E+05
+        1.015E-07   1.040E-07   1.027E-07   2.263E+05
+        1.040E-07   1.065E-07   1.053E-07   1.422E+05
+        1.065E-07   1.091E-07   1.078E-07   8.510E+04
+        1.091E-07   1.116E-07   1.104E-07   4.817E+04
+        1.116E-07   1.142E-07   1.129E-07   2.595E+04
+        1.142E-07   1.167E-07   1.154E-07   1.309E+04
+        1.167E-07   1.192E-07   1.180E-07   5.789E+03
+        1.192E-07   1.218E-07   1.205E-07   2.157E+03
+        1.218E-07   1.243E-07   1.230E-07   4.983E+02
+        1.243E-07   1.268E-07   1.256E-07   1.970E+01
+
+           Check for normalization:
+           (RMAX-RMIN)*SUM(p(R))=  1.035E+00  SHOULD BE= 1
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.hydropro-sol.txt b/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.hydropro-sol.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9602628134bfd86b723bd1c7a6e4457c58beb233
Binary files /dev/null and b/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.hydropro-sol.txt differ
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.pdb b/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..dd4e2acadd5947cdafc10716d6c70805e01ff701
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/b-bead.pdb
@@ -0,0 +1,24 @@
+CRYST1  394.970  493.874  795.001  90.00  90.00  90.00 P 1           1
+ATOM      1  C4' THY S  16       1.387  -0.487 -77.056  0.00  0.00      S101  
+ATOM      2  H4' THY S  16       1.453  -1.596 -77.013  0.00  0.00      S101  
+ATOM      3  O4' THY S  16       2.736   0.086 -77.219  0.00  0.00      S101  
+ATOM      4  C1' THY S  16       2.946   1.123 -76.275  0.00  0.00      S101  
+ATOM      5  H1' THY S  16       4.009   1.037 -75.963  0.00  0.00      S101  
+ATOM      6  N1  THY S  16       2.682   2.456 -76.875  0.00  0.00      S101  
+ATOM      7  C6  THY S  16       1.430   3.039 -76.789  0.00  0.00      S101  
+ATOM      8  H6  THY S  16       0.588   2.368 -76.622  0.00  0.00      S101  
+ATOM      9  C2  THY S  16       3.729   3.125 -77.465  0.00  0.00      S101  
+ATOM     10  O2  THY S  16       4.867   2.674 -77.534  0.00  0.00      S101  
+ATOM     11  N3  THY S  16       3.427   4.381 -77.923  0.00  0.00      S101  
+ATOM     12  H3  THY S  16       4.197   4.890 -78.333  0.00  0.00      S101  
+ATOM     13  C4  THY S  16       2.263   5.077 -77.691  0.00  0.00      S101  
+ATOM     14  O4  THY S  16       2.250   6.297 -77.847  0.00  0.00      S101  
+ATOM     15  C5  THY S  16       1.169   4.286 -77.198  0.00  0.00      S101  
+ATOM     16  C5M THY S  16      -0.168   4.915 -76.954  0.00  0.00      S101  
+ATOM     17  H51 THY S  16      -0.985   4.177 -77.103  0.00  0.00      S101  
+ATOM     18  H52 THY S  16      -0.357   5.760 -77.650  0.00  0.00      S101  
+ATOM     19  H53 THY S  16      -0.240   5.295 -75.913  0.00  0.00      S101  
+ATOM     20  C2' THY S  16       2.081   0.750 -75.088  0.00  0.00      S101  
+ATOM     21 H2'' THY S  16       1.779   1.626 -74.475  0.00  0.00      S101  
+ATOM     22  H2' THY S  16       2.651   0.047 -74.443  0.00  0.00      S101  
+END
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/b.hydropro.dat b/mrdna/arbdmodel/resources/two_bead_model/diffusion/b.hydropro.dat
new file mode 100644
index 0000000000000000000000000000000000000000..3788e9929348c88ce1b626dda0859af7521e46d9
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/b.hydropro.dat
@@ -0,0 +1,18 @@
+b                        !Name of molecule
+b-bead.hydropro                        !Name for output file 
+b-bead.pdb     !Strucutural (PBD) file       
+1               !Type of calculation
+2.9,            !AER, hydrodynamic radius of primary elements
+6,              !NSIG
+1.2,            !Minimum radius of beads in the shell (SIGMIN)	
+2.0,            !Maximum radius of beads in the shell (SIGMAX)	
+22.,            !T (temperature, centigrade)
+0.01,           !ETA (Viscosity of the solvent in poises)
+181,         !RM (Molecular weight)
+1.0,	        !Partial specific volume, cm3/g
+1.0,            !Solvent density, g/cm3
+-1              !Number of values of Q
+-1  		!Number of intervals
+0,              !Number of trials for MC calculation of covolume
+1               !IDIF=1 (yes) for full diffusion tensors
+*
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/hydropro-fit.txt b/mrdna/arbdmodel/resources/two_bead_model/diffusion/hydropro-fit.txt
new file mode 100644
index 0000000000000000000000000000000000000000..00827c1204e06695c25a7630d8523dabcd21a7a8
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/hydropro-fit.txt
@@ -0,0 +1,2 @@
+b           2.95E+02  1.00E-02  1.81E+02  1.00E+00  2.95E+02  1.00E-02  1.00E+00  4.14E-06  4.26E-08  4.29E-22  1.89E-10  1.77E-10  1.74E-10  1.42E-10  1.43E-10  5.27E+00  1.27E-07  0.00E+00
+b           2.95E+02  1.00E-02  1.81E+02  1.00E+00  2.95E+02  1.00E-02  1.00E+00  5.23E-08  5.50E-08  4.68E-08  5.69E-08  5.56E-08  5.54E-08  5.17E-08  5.18E-08  5.33E-08  6.34E-08 -1.00E+00
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/hydropro-sum.txt b/mrdna/arbdmodel/resources/two_bead_model/diffusion/hydropro-sum.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2892a63b5f92cc384bd49710c53f5ac8ef2a821e
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/hydropro-sum.txt
@@ -0,0 +1 @@
+b           4.14E-06  4.26E-08  4.29E-22  1.89E-10  1.77E-10  1.74E-10  1.42E-10  1.43E-10  5.27E+00  0.00E+00  1.27E-07  0.00E+00  5.10E+01  1.76E+08  1.04E+00  1.03E+00  1.02E+00  9.94E-01  9.64E-01  9.26E-01  8.81E-01  8.31E-01  7.78E-01  7.21E-01  6.62E-01  6.03E-01  5.45E-01  4.88E-01  4.33E-01  3.82E-01  3.34E-01  2.90E-01  2.50E-01  2.14E-01  1.83E-01  1.55E-01  1.31E-01  1.11E-01  9.39E-02  7.95E-02  6.75E-02  5.75E-02  4.94E-02  4.27E-02  3.72E-02  3.28E-02  2.91E-02  2.60E-02  2.35E-02  2.14E-02  1.97E-02  1.82E-02  1.70E-02  1.59E-02  1.50E-02  1.42E-02  1.35E-02  1.29E-02  1.24E-02  1.20E-02  1.15E-02  1.11E-02  1.08E-02  1.04E-02  1.01E-02  5.00E+01  1.27E-07  4.27E+05  1.51E+06  2.87E+06  4.48E+06  6.28E+06  8.23E+06  1.02E+07  1.23E+07  1.42E+07  1.61E+07  1.77E+07  1.91E+07  2.02E+07  2.09E+07  2.13E+07  2.14E+07  2.11E+07  2.05E+07  1.96E+07  1.85E+07  1.72E+07  1.58E+07  1.44E+07  1.30E+07  1.16E+07  1.03E+07  8.95E+06  7.71E+06  6.56E+06  5.50E+06  4.55E+06  3.72E+06  2.99E+06  2.36E+06  1.83E+06  1.38E+06  1.02E+06  7.33E+05  5.11E+05  3.46E+05  2.26E+05  1.42E+05  8.51E+04  4.82E+04  2.60E+04  1.31E+04  5.79E+03  2.16E+03  4.98E+02  1.97E+01
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/hydropro.dat b/mrdna/arbdmodel/resources/two_bead_model/diffusion/hydropro.dat
new file mode 100644
index 0000000000000000000000000000000000000000..3788e9929348c88ce1b626dda0859af7521e46d9
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/hydropro.dat
@@ -0,0 +1,18 @@
+b                        !Name of molecule
+b-bead.hydropro                        !Name for output file 
+b-bead.pdb     !Strucutural (PBD) file       
+1               !Type of calculation
+2.9,            !AER, hydrodynamic radius of primary elements
+6,              !NSIG
+1.2,            !Minimum radius of beads in the shell (SIGMIN)	
+2.0,            !Maximum radius of beads in the shell (SIGMAX)	
+22.,            !T (temperature, centigrade)
+0.01,           !ETA (Viscosity of the solvent in poises)
+181,         !RM (Molecular weight)
+1.0,	        !Partial specific volume, cm3/g
+1.0,            !Solvent density, g/cm3
+-1              !Number of values of Q
+-1  		!Number of intervals
+0,              !Number of trials for MC calculation of covolume
+1               !IDIF=1 (yes) for full diffusion tensors
+*
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/hydropro10-lnx.exe b/mrdna/arbdmodel/resources/two_bead_model/diffusion/hydropro10-lnx.exe
new file mode 120000
index 0000000000000000000000000000000000000000..a9bf1107c28369cdeec95b978f5831e4f22fe026
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/hydropro10-lnx.exe
@@ -0,0 +1 @@
+/home/cmaffeo2/Public/hydropro10-lnx.exe
\ No newline at end of file
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.hydropro-pri.bea b/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.hydropro-pri.bea
new file mode 100644
index 0000000000000000000000000000000000000000..f46a0c639e7f694559353d7cfe2c80bf6b893c2b
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.hydropro-pri.bea
@@ -0,0 +1,8 @@
+ATOM      1  O                  -0.288   0.686 -39.332
+ATOM      2  O                  -0.585   0.233 -38.897
+ATOM      3  O                  -0.815   0.458 -38.197
+ATOM      4  O                  -1.508   0.309 -38.114
+ATOM      5  O                  -0.601   1.131 -38.071
+ATOM      6  O                  -0.406   0.005 -37.723
+ATOM      7  O                   0.286  -0.017 -37.797
+ATOM      8  O                   0.412  -0.347 -38.201
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.hydropro-pri.vrml b/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.hydropro-pri.vrml
new file mode 100644
index 0000000000000000000000000000000000000000..2dfa5a517fc50506248ff839740bae70562c1b2d
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.hydropro-pri.vrml
@@ -0,0 +1,73 @@
+#VRML V2.0 utf8
+Transform {
+  translation  -0.45362E+00  -0.11172E+01   0.60272E-01
+  children [
+    Shape {
+      geometry Sphere { radius   0.15123E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation  -0.30105E+00  -0.50216E+00  -0.34204E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.15123E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation  -0.37239E+00   0.25315E+00   0.60709E-03
+  children [
+    Shape {
+      geometry Sphere { radius   0.15123E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation  -0.85319E+00   0.68340E+00  -0.42082E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.15123E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation  -0.51600E+00   0.19023E+00   0.75918E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.15123E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation   0.39776E+00   0.56724E+00  -0.69582E-01
+  children [
+    Shape {
+      geometry Sphere { radius   0.15123E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation   0.97636E+00   0.16692E+00   0.19842E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.15123E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
+Transform {
+  translation   0.11221E+01  -0.24157E+00  -0.18605E+00
+  children [
+    Shape {
+      geometry Sphere { radius   0.15123E+01 }
+      appearance Appearance { material Material{ diffuseColor 1.0 1.0 0.0 }                                                                                                                           }
+    }
+  ]
+}
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.hydropro-res.txt b/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.hydropro-res.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d5fa34c66ecc60d17b15e8876ac040ad43a9a209
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.hydropro-res.txt
@@ -0,0 +1,190 @@
+      ------------------------------------------------------------
+                 HYDROPRO, Version 10, September 2011   
+              A. Ortega, D. Amoros, J. Garcia de la Torre, 
+      "Prediction of hydrodynamic and other solution properties of 
+          rigid proteins from atomic- and residue-level models" 
+                Biophys. J. 101, 892-898 (2011). 
+      ------------------------------------------------------------
+
+
+                          SUMMARY OF DATA AND RESULTS
+  
+                            This file : p-bead.hydropro-res.txt       
+                                 Case : P                        !Name
+                      Structural file : p-bead.pdb                    
+  
+  Radius of elements in primary model : 2.90 Angs.
+         Type of hydropro calculation : 1
+  
+                           Temperature:  22.0 centigrade
+                     Solvent viscosity:  0.01000 poise
+                      Molecular weight:      122. Da
+        Solute partial specific volume: 1.000 cm^3/g
+                      Solution density: 1.000 g/cm^3
+  
+   Translational diffusion coefficient:  4.225E-06 cm^2/s
+                    Radius of gyration:  3.977E-08 cm
+                                Volume:  4.737E-22 cm^3
+      Rotational diffusion coefficient:  1.989E+09 s^-1
+                   Relaxation time (1):  1.360E-10 s
+                   Relaxation time (2):  1.370E-10 s
+                   Relaxation time (3):  1.407E-10 s
+                   Relaxation time (4):  1.442E-10 s
+                   Relaxation time (5):  1.442E-10 s
+      Harmonic mean (correlation) time:  1.403E-10 s
+                   Intrinsic viscosity:  7.327E+00 cm^3/g
+             Sedimentation coefficient:  0.000E+00 Svedberg
+  
+
+
+               Center of diffusion (x):  5.120E-08 cm
+               Center of diffusion (x):  4.284E-08 cm
+               Center of diffusion (x):  4.957E-08 cm
+
+           Generalized (6x6) diffusion matrix:  (Dtt  Dtr)
+
+                                                (Drt  Drr)
+
+
+  5.135E-06 -8.539E-08 -8.050E-10     1.991E-01 -3.158E-01 -5.231E-01
+ -8.543E-08  4.878E-06 -3.549E-08    -3.160E-01 -1.947E-01  2.990E-01
+ -7.718E-10 -3.553E-08  5.027E-06    -5.231E-01  2.992E-01  4.199E-02
+
+
+  1.991E-01 -3.160E-01 -5.231E-01     2.160E+09 -1.170E+08  8.446E+06
+ -3.158E-01 -1.947E-01  2.992E-01    -1.170E+08  1.835E+09 -3.214E+07
+ -5.231E-01  2.990E-01  4.199E-02     8.451E+06 -3.214E+07  1.971E+09
+
+                        List of equivalent radii
+
+                         Translational:  5.116E-08
+                             Gyration :  5.135E-08
+                               Volume :  4.836E-08
+                          Rotation (1):  5.095E-08
+                          Rotation (2):  5.107E-08
+                          Rotation (3):  5.153E-08
+                          Rotation (4):  5.196E-08
+                          Rotation (5):  5.196E-08
+                          Rotation (h):  4.411E-08
+                   Intrinsic viscosity:  5.214E-08
+                      Longest distance:  5.003E-08
+  
+                     Longest distance :  1.001E-07 cm
+
+
+
+                Calculation of scattering form factor, P vs h
+                                  h           P(h)
+                           0.00E+00       1.05E+00
+                           4.10E+06       1.04E+00
+                           8.19E+06       1.03E+00
+                           1.23E+07       1.00E+00
+                           1.64E+07       9.73E-01
+                           2.05E+07       9.34E-01
+                           2.46E+07       8.89E-01
+                           2.87E+07       8.38E-01
+                           3.28E+07       7.83E-01
+                           3.69E+07       7.24E-01
+                           4.10E+07       6.64E-01
+                           4.51E+07       6.03E-01
+                           4.92E+07       5.43E-01
+                           5.33E+07       4.84E-01
+                           5.74E+07       4.28E-01
+                           6.15E+07       3.74E-01
+                           6.56E+07       3.25E-01
+                           6.97E+07       2.79E-01
+                           7.37E+07       2.38E-01
+                           7.78E+07       2.01E-01
+                           8.19E+07       1.69E-01
+                           8.60E+07       1.41E-01
+                           9.01E+07       1.17E-01
+                           9.42E+07       9.71E-02
+                           9.83E+07       8.04E-02
+                           1.02E+08       6.67E-02
+                           1.07E+08       5.56E-02
+                           1.11E+08       4.68E-02
+                           1.15E+08       3.97E-02
+                           1.19E+08       3.42E-02
+                           1.23E+08       3.00E-02
+                           1.27E+08       2.66E-02
+                           1.31E+08       2.41E-02
+                           1.35E+08       2.20E-02
+                           1.39E+08       2.04E-02
+                           1.43E+08       1.91E-02
+                           1.47E+08       1.81E-02
+                           1.52E+08       1.72E-02
+                           1.56E+08       1.64E-02
+                           1.60E+08       1.57E-02
+                           1.64E+08       1.51E-02
+                           1.68E+08       1.45E-02
+                           1.72E+08       1.40E-02
+                           1.76E+08       1.35E-02
+                           1.80E+08       1.30E-02
+                           1.84E+08       1.26E-02
+                           1.88E+08       1.21E-02
+                           1.93E+08       1.17E-02
+                           1.97E+08       1.13E-02
+                           2.01E+08       1.09E-02
+                           2.05E+08       1.05E-02
+
+
+                          Distribution of distances
+
+         50 intervals between RMIN and RMAX centered at R; 
+                          Values of p(R)
+
+
+        RMIN(cm)    RMAX(cm)     R(cm)    p(R)(cm^(-1))
+        0.000E+00   2.001E-09   1.001E-09   4.429E+05
+        2.001E-09   4.003E-09   3.002E-09   1.534E+06
+        4.003E-09   6.004E-09   5.003E-09   2.880E+06
+        6.004E-09   8.005E-09   7.005E-09   4.452E+06
+        8.005E-09   1.001E-08   9.006E-09   6.214E+06
+        1.001E-08   1.201E-08   1.101E-08   8.128E+06
+        1.201E-08   1.401E-08   1.301E-08   1.015E+07
+        1.401E-08   1.601E-08   1.501E-08   1.222E+07
+        1.601E-08   1.801E-08   1.701E-08   1.429E+07
+        1.801E-08   2.001E-08   1.901E-08   1.631E+07
+        2.001E-08   2.201E-08   2.101E-08   1.824E+07
+        2.201E-08   2.402E-08   2.302E-08   2.001E+07
+        2.402E-08   2.602E-08   2.502E-08   2.159E+07
+        2.602E-08   2.802E-08   2.702E-08   2.294E+07
+        2.802E-08   3.002E-08   2.902E-08   2.401E+07
+        3.002E-08   3.202E-08   3.102E-08   2.477E+07
+        3.202E-08   3.402E-08   3.302E-08   2.523E+07
+        3.402E-08   3.602E-08   3.502E-08   2.535E+07
+        3.602E-08   3.803E-08   3.702E-08   2.515E+07
+        3.803E-08   4.003E-08   3.903E-08   2.463E+07
+        4.003E-08   4.203E-08   4.103E-08   2.382E+07
+        4.203E-08   4.403E-08   4.303E-08   2.273E+07
+        4.403E-08   4.603E-08   4.503E-08   2.141E+07
+        4.603E-08   4.803E-08   4.703E-08   1.989E+07
+        4.803E-08   5.003E-08   4.903E-08   1.824E+07
+        5.003E-08   5.203E-08   5.103E-08   1.651E+07
+        5.203E-08   5.404E-08   5.303E-08   1.475E+07
+        5.404E-08   5.604E-08   5.504E-08   1.303E+07
+        5.604E-08   5.804E-08   5.704E-08   1.143E+07
+        5.804E-08   6.004E-08   5.904E-08   9.980E+06
+        6.004E-08   6.204E-08   6.104E-08   8.605E+06
+        6.204E-08   6.404E-08   6.304E-08   7.304E+06
+        6.404E-08   6.604E-08   6.504E-08   6.101E+06
+        6.604E-08   6.804E-08   6.704E-08   5.011E+06
+        6.804E-08   7.005E-08   6.905E-08   4.043E+06
+        7.005E-08   7.205E-08   7.105E-08   3.197E+06
+        7.205E-08   7.405E-08   7.305E-08   2.471E+06
+        7.405E-08   7.605E-08   7.505E-08   1.856E+06
+        7.605E-08   7.805E-08   7.705E-08   1.351E+06
+        7.805E-08   8.005E-08   7.905E-08   9.519E+05
+        8.005E-08   8.205E-08   8.105E-08   6.488E+05
+        8.205E-08   8.406E-08   8.305E-08   4.270E+05
+        8.406E-08   8.606E-08   8.506E-08   2.669E+05
+        8.606E-08   8.806E-08   8.706E-08   1.548E+05
+        8.806E-08   9.006E-08   8.906E-08   8.041E+04
+        9.006E-08   9.206E-08   9.106E-08   3.566E+04
+        9.206E-08   9.406E-08   9.306E-08   1.332E+04
+        9.406E-08   9.606E-08   9.506E-08   4.376E+03
+        9.606E-08   9.806E-08   9.706E-08   9.813E+02
+        9.806E-08   1.001E-07   9.907E-08   3.842E+01
+
+           Check for normalization:
+           (RMAX-RMIN)*SUM(p(R))=  1.046E+00  SHOULD BE= 1
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.hydropro-sol.txt b/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.hydropro-sol.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6b6091af3e9c4eef5cb5be4ccf2f1ca2eb1e58fa
Binary files /dev/null and b/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.hydropro-sol.txt differ
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.pdb b/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..d936bd8aa1e3d8604c4c87b735b3816c1d6fa407
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/p-bead.pdb
@@ -0,0 +1,12 @@
+CRYST1  394.970  493.874  795.001  90.00  90.00  90.00 P 1           1
+ATOM      1  C3' GUA S  15      -0.596   1.421 -81.474  0.00  0.00      S101  
+ATOM      2  H3' GUA S  15      -1.199   2.342 -81.620  0.00  0.00      S101  
+ATOM      3  O3' GUA S  15      -1.211   0.482 -80.573  0.00  0.00      S101  
+ATOM      4  P   THY S  16      -1.688   0.949 -79.123  0.00  0.00      S101  
+ATOM      5  O1P THY S  16      -3.123   0.641 -78.951  0.00  0.00      S101  
+ATOM      6  O2P THY S  16      -1.244   2.342 -78.861  0.00  0.00      S101  
+ATOM      7  O5' THY S  16      -0.842   0.010 -78.141  0.00  0.00      S101  
+ATOM      8  C5' THY S  16       0.593  -0.035 -78.293  0.00  0.00      S101  
+ATOM      9  H5' THY S  16       0.970   0.981 -78.535  0.00  0.00      S101  
+ATOM     10 H5'' THY S  16       0.854  -0.718 -79.130  0.00  0.00      S101  
+END
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/p.hydropro.dat b/mrdna/arbdmodel/resources/two_bead_model/diffusion/p.hydropro.dat
new file mode 100644
index 0000000000000000000000000000000000000000..aac57039c7c014fbbec297fd2e2cdf898fa3365e
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/p.hydropro.dat
@@ -0,0 +1,18 @@
+P                        !Name of molecule
+p-bead.hydropro                        !Name for output file 
+p-bead.pdb     !Strucutural (PBD) file       
+1               !Type of calculation
+2.9,            !AER, hydrodynamic radius of primary elements
+6,              !NSIG
+1.2,            !Minimum radius of beads in the shell (SIGMIN)	
+2.0,            !Maximum radius of beads in the shell (SIGMAX)	
+22.,            !T (temperature, centigrade)
+0.01,           !ETA (Viscosity of the solvent in poises)
+122,         !RM (Molecular weight)
+1.0,	        !Partial specific volume, cm3/g
+1.0,            !Solvent density, g/cm3
+-1              !Number of values of Q
+-1  		!Number of intervals
+0,              !Number of trials for MC calculation of covolume
+1               !IDIF=1 (yes) for full diffusion tensors
+*
diff --git a/mrdna/arbdmodel/resources/two_bead_model/diffusion/run.sh b/mrdna/arbdmodel/resources/two_bead_model/diffusion/run.sh
new file mode 100644
index 0000000000000000000000000000000000000000..f1932c0965b10c08d2c8145ffcccddbe92486adf
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/diffusion/run.sh
@@ -0,0 +1,5 @@
+
+for i in p b; do
+    cp -f $i.hydropro.dat hydropro.dat
+    ./hydropro10-lnx.exe 
+done
diff --git a/mrdna/arbdmodel/resources/two_bead_model/p0p1p2p3.dat b/mrdna/arbdmodel/resources/two_bead_model/p0p1p2p3.dat
new file mode 100644
index 0000000000000000000000000000000000000000..42b5d892dda2ad1250ee4fff8576eab06de6085c
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/p0p1p2p3.dat
@@ -0,0 +1,180 @@
+-180 0.331491
+-178 0.340033
+-176 0.366540
+-174 0.371105
+-172 0.368259
+-170 0.359652
+-168 0.373302
+-166 0.378814
+-164 0.388061
+-162 0.379878
+-160 0.392574
+-158 0.397884
+-156 0.392854
+-154 0.385870
+-152 0.384760
+-150 0.391249
+-148 0.397294
+-146 0.394862
+-144 0.400624
+-142 0.395834
+-140 0.401573
+-138 0.399388
+-136 0.404732
+-134 0.399077
+-132 0.402104
+-130 0.401334
+-128 0.402310
+-126 0.406637
+-124 0.401189
+-122 0.405452
+-120 0.396897
+-118 0.396377
+-116 0.391831
+-114 0.381875
+-112 0.378410
+-110 0.371038
+-108 0.374191
+-106 0.362868
+-104 0.352374
+-102 0.343466
+-100 0.349973
+-98 0.337400
+-96 0.330375
+-94 0.313766
+-92 0.324400
+-90 0.316124
+-88 0.304002
+-86 0.287405
+-84 0.272551
+-82 0.270613
+-80 0.255013
+-78 0.254488
+-76 0.242488
+-74 0.228795
+-72 0.218269
+-70 0.205314
+-68 0.208409
+-66 0.182237
+-64 0.173722
+-62 0.160758
+-60 0.163178
+-58 0.153167
+-56 0.138261
+-54 0.137087
+-52 0.132396
+-50 0.133878
+-48 0.128352
+-46 0.128606
+-44 0.124664
+-42 0.118276
+-40 0.116375
+-38 0.116042
+-36 0.108532
+-34 0.101769
+-32 0.098384
+-30 0.104061
+-28 0.093049
+-26 0.086992
+-24 0.077681
+-22 0.086766
+-20 0.067358
+-18 0.056292
+-16 0.038906
+-14 0.053421
+-12 0.045711
+-10 0.034005
+-8 0.019798
+-6 0.012138
+-4 0.015972
+-2 0.000000
+0 0.006525
+2 0.002471
+4 0.011939
+6 0.016578
+8 0.013909
+10 0.017481
+12 0.012476
+14 0.021901
+16 0.015736
+18 0.015537
+20 0.019772
+22 0.033021
+24 0.032050
+26 0.032056
+28 0.036189
+30 0.049031
+32 0.043227
+34 0.040354
+36 0.040779
+38 0.054280
+40 0.057313
+42 0.061096
+44 0.055712
+46 0.054983
+48 0.054594
+50 0.065409
+52 0.069449
+54 0.069023
+56 0.062544
+58 0.077351
+60 0.084929
+62 0.098474
+64 0.086655
+66 0.087385
+68 0.090510
+70 0.099438
+72 0.104963
+74 0.105940
+76 0.113247
+78 0.124969
+80 0.129429
+82 0.140494
+84 0.140526
+86 0.153154
+88 0.157489
+90 0.178310
+92 0.193892
+94 0.201944
+96 0.204885
+98 0.205562
+100 0.215317
+102 0.222357
+104 0.228624
+106 0.236470
+108 0.245530
+110 0.249320
+112 0.253735
+114 0.253470
+116 0.257966
+118 0.257117
+120 0.247950
+122 0.250531
+124 0.251045
+126 0.256139
+128 0.244197
+130 0.233786
+132 0.230158
+134 0.227402
+136 0.227382
+138 0.226578
+140 0.229866
+142 0.235232
+144 0.225586
+146 0.232768
+148 0.229897
+150 0.246764
+152 0.235456
+154 0.233653
+156 0.240662
+158 0.257507
+160 0.272744
+162 0.268932
+164 0.279731
+166 0.296488
+168 0.311129
+170 0.322979
+172 0.318129
+174 0.327723
+176 0.317460
+178.000000 0.317460
diff --git a/mrdna/arbdmodel/resources/two_bead_model/p1p2b2.dat b/mrdna/arbdmodel/resources/two_bead_model/p1p2b2.dat
new file mode 100644
index 0000000000000000000000000000000000000000..bfdd772908388f4f5f9d3b37de6eb5d9c10e53e6
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/p1p2b2.dat
@@ -0,0 +1,181 @@
+0.000000 15.810857
+1.000000 15.372750
+2.000000 14.941069
+3.000000 14.515813
+4.000000 14.096983
+5.000000 13.684578
+6.000000 13.278598
+7.000000 12.879043
+8.000000 12.485914
+9.000000 12.099210
+10.000000 11.718931
+11.000000 11.345078
+12.000000 10.977650
+13.000000 10.616647
+14.000000 10.262070
+15.000000 9.913918
+16.000000 9.572191
+17.000000 9.236889
+18.000000 8.908013
+19.000000 8.585562
+20.000000 8.269536
+21.000000 7.959936
+22.000000 7.656761
+23.000000 7.360011
+24.000000 7.069687
+25.000000 6.785788
+26.000000 6.508314
+27.000000 6.237265
+28.000000 5.972642
+29.000000 5.714444
+30.000000 5.462671
+31.000000 5.217324
+32.000000 4.978402
+33.000000 4.745905
+34.000000 4.519834
+35.000000 4.300188
+36.000000 4.086967
+37.000000 3.880171
+38.000000 3.528120
+39.000000 2.926355
+40.000000 2.363602
+41.000000 1.915521
+42.000000 1.553919
+43.000000 1.201649
+44.000000 0.986096
+45.000000 0.726066
+46.000000 0.545360
+47.000000 0.358965
+48.000000 0.227686
+49.000000 0.124322
+50.000000 0.057149
+51.000000 0.017648
+52.000000 0.000238
+53.000000 0.000000
+54.000000 0.006728
+55.000000 0.026333
+56.000000 0.046231
+57.000000 0.066285
+58.000000 0.082703
+59.000000 0.094197
+60.000000 0.099653
+61.000000 0.100693
+62.000000 0.101148
+63.000000 0.101048
+64.000000 0.104676
+65.000000 0.112219
+66.000000 0.123536
+67.000000 0.137428
+68.000000 0.153234
+69.000000 0.167650
+70.000000 0.180019
+71.000000 0.189834
+72.000000 0.197618
+73.000000 0.203516
+74.000000 0.209853
+75.000000 0.216578
+76.000000 0.223917
+77.000000 0.233959
+78.000000 0.245303
+79.000000 0.258562
+80.000000 0.274654
+81.000000 0.295643
+82.000000 0.318859
+83.000000 0.345478
+84.000000 0.373569
+85.000000 0.400093
+86.000000 0.424521
+87.000000 0.445950
+88.000000 0.464370
+89.000000 0.477614
+90.000000 0.488787
+91.000000 0.495502
+92.000000 0.498984
+93.000000 0.497826
+94.000000 0.495119
+95.000000 0.488869
+96.000000 0.481119
+97.000000 0.471464
+98.000000 0.461432
+99.000000 0.450643
+100.000000 0.439050
+101.000000 0.426642
+102.000000 0.413997
+103.000000 0.401922
+104.000000 0.390562
+105.000000 0.381747
+106.000000 0.374052
+107.000000 0.367920
+108.000000 0.361275
+109.000000 0.354829
+110.000000 0.348843
+111.000000 0.344448
+112.000000 0.341276
+113.000000 0.340724
+114.000000 0.341697
+115.000000 0.341062
+116.000000 0.338884
+117.000000 0.334379
+118.000000 0.327319
+119.000000 0.316739
+120.000000 0.305308
+121.000000 0.292649
+122.000000 0.278778
+123.000000 0.263929
+124.000000 0.248002
+125.000000 0.231593
+126.000000 0.215089
+127.000000 0.200784
+128.000000 0.187306
+129.000000 0.177782
+130.000000 0.169598
+131.000000 0.162949
+132.000000 0.154742
+133.000000 0.148383
+134.000000 0.142591
+135.000000 0.138387
+136.000000 0.134491
+137.000000 0.133811
+138.000000 0.133591
+139.000000 0.131710
+140.000000 0.128641
+141.000000 0.126153
+142.000000 0.122516
+143.000000 0.117368
+144.000000 0.113037
+145.000000 0.109589
+146.000000 0.106052
+147.000000 0.102075
+148.000000 0.097758
+149.000000 0.092477
+150.000000 0.086250
+151.000000 0.079370
+152.000000 0.072712
+153.000000 0.067777
+154.000000 0.064122
+155.000000 0.061457
+156.000000 0.059469
+157.000000 0.058226
+158.000000 0.056047
+159.000000 0.053435
+160.000000 0.051314
+161.000000 0.050137
+162.000000 0.050456
+163.000000 0.053543
+164.000000 0.058124
+165.000000 0.061683
+166.000000 0.063938
+167.000000 0.065576
+168.000000 0.068600
+169.000000 0.073251
+170.000000 0.079973
+171.000000 0.086567
+172.000000 0.092866
+173.000000 0.101419
+174.000000 0.117207
+175.000000 0.150905
+176.000000 0.191843
+177.000000 0.247866
+178.000000 0.218682
+179.000000 0.247866
+180 0
diff --git a/mrdna/arbdmodel/resources/two_bead_model/p1p2p3.dat b/mrdna/arbdmodel/resources/two_bead_model/p1p2p3.dat
new file mode 100644
index 0000000000000000000000000000000000000000..ac28356a540f10fc966d31a31308715d618150ef
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/p1p2p3.dat
@@ -0,0 +1,181 @@
+0.000000 14.299878
+1.000000 13.909996
+2.000000 13.526539
+3.000000 13.149508
+4.000000 12.778902
+5.000000 12.414721
+6.000000 12.056965
+7.000000 11.705635
+8.000000 11.360730
+9.000000 11.022250
+10.000000 10.690196
+11.000000 10.364567
+12.000000 10.045363
+13.000000 9.732585
+14.000000 9.426231
+15.000000 9.126303
+16.000000 8.832801
+17.000000 8.545724
+18.000000 8.265072
+19.000000 7.990845
+20.000000 7.723044
+21.000000 7.461667
+22.000000 7.206717
+23.000000 6.958191
+24.000000 6.716091
+25.000000 6.480416
+26.000000 6.251167
+27.000000 6.028342
+28.000000 5.811943
+29.000000 5.601970
+30.000000 5.398421
+31.000000 5.201298
+32.000000 5.010600
+33.000000 4.826328
+34.000000 4.648481
+35.000000 4.477059
+36.000000 4.312062
+37.000000 4.153491
+38.000000 4.001345
+39.000000 3.855625
+40.000000 3.716329
+41.000000 3.583459
+42.000000 3.457014
+43.000000 3.336995
+44.000000 3.223401
+45.000000 3.116232
+46.000000 3.015488
+47.000000 2.921170
+48.000000 2.763623
+49.000000 2.360886
+50.000000 2.019747
+51.000000 1.668737
+52.000000 1.325532
+53.000000 1.061427
+54.000000 0.810365
+55.000000 0.581350
+56.000000 0.396996
+57.000000 0.259336
+58.000000 0.145648
+59.000000 0.061053
+60.000000 0.014388
+61.000000 0.000000
+62.000000 0.003727
+63.000000 0.031139
+64.000000 0.073243
+65.000000 0.120260
+66.000000 0.171421
+67.000000 0.223644
+68.000000 0.273700
+69.000000 0.317181
+70.000000 0.357057
+71.000000 0.391910
+72.000000 0.421953
+73.000000 0.447424
+74.000000 0.476942
+75.000000 0.508274
+76.000000 0.535433
+77.000000 0.564615
+78.000000 0.592408
+79.000000 0.615087
+80.000000 0.633127
+81.000000 0.654916
+82.000000 0.673345
+83.000000 0.690849
+84.000000 0.708051
+85.000000 0.724622
+86.000000 0.737715
+87.000000 0.749689
+88.000000 0.762641
+89.000000 0.779171
+90.000000 0.795600
+91.000000 0.811683
+92.000000 0.830517
+93.000000 0.849729
+94.000000 0.859503
+95.000000 0.872517
+96.000000 0.884795
+97.000000 0.893580
+98.000000 0.900741
+99.000000 0.911766
+100.000000 0.915209
+101.000000 0.918138
+102.000000 0.920570
+103.000000 0.921327
+104.000000 0.918001
+105.000000 0.916820
+106.000000 0.915030
+107.000000 0.913977
+108.000000 0.911797
+109.000000 0.916275
+110.000000 0.921019
+111.000000 0.923813
+112.000000 0.923372
+113.000000 0.923964
+114.000000 0.919977
+115.000000 0.915011
+116.000000 0.912580
+117.000000 0.910465
+118.000000 0.905344
+119.000000 0.898418
+120.000000 0.889038
+121.000000 0.875522
+122.000000 0.859929
+123.000000 0.844661
+124.000000 0.830394
+125.000000 0.814343
+126.000000 0.797064
+127.000000 0.780191
+128.000000 0.760126
+129.000000 0.737363
+130.000000 0.716696
+131.000000 0.694936
+132.000000 0.671662
+133.000000 0.651536
+134.000000 0.630067
+135.000000 0.606628
+136.000000 0.585872
+137.000000 0.566814
+138.000000 0.545952
+139.000000 0.527384
+140.000000 0.510078
+141.000000 0.493465
+142.000000 0.477200
+143.000000 0.461874
+144.000000 0.446777
+145.000000 0.433635
+146.000000 0.419173
+147.000000 0.404997
+148.000000 0.392680
+149.000000 0.381555
+150.000000 0.368316
+151.000000 0.356139
+152.000000 0.342842
+153.000000 0.328856
+154.000000 0.314496
+155.000000 0.303326
+156.000000 0.291780
+157.000000 0.281607
+158.000000 0.270002
+159.000000 0.259916
+160.000000 0.247644
+161.000000 0.236991
+162.000000 0.227099
+163.000000 0.219985
+164.000000 0.210962
+165.000000 0.204334
+166.000000 0.198027
+167.000000 0.193038
+168.000000 0.187469
+169.000000 0.184741
+170.000000 0.182513
+171.000000 0.183887
+172.000000 0.185177
+173.000000 0.183884
+174.000000 0.190952
+175.000000 0.204653
+176.000000 0.225943
+177.000000 0.260542
+178.000000 0.304025
+179.000000 0.282093
+180 0
diff --git a/mrdna/arbdmodel/resources/two_bead_model/zeroBBP.dat b/mrdna/arbdmodel/resources/two_bead_model/zeroBBP.dat
new file mode 100644
index 0000000000000000000000000000000000000000..f86c33577de28cafde51c0e67b8a146578a409c3
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/zeroBBP.dat
@@ -0,0 +1,2500 @@
+0.000000 0
+0.020000 0
+0.040000 0
+0.060000 0
+0.080000 0
+0.100000 0
+0.120000 0
+0.140000 0
+0.160000 0
+0.180000 0
+0.200000 0
+0.220000 0
+0.240000 0
+0.260000 0
+0.280000 0
+0.300000 0
+0.320000 0
+0.340000 0
+0.360000 0
+0.380000 0
+0.400000 0
+0.420000 0
+0.440000 0
+0.460000 0
+0.480000 0
+0.500000 0
+0.520000 0
+0.540000 0
+0.560000 0
+0.580000 0
+0.600000 0
+0.620000 0
+0.640000 0
+0.660000 0
+0.680000 0
+0.700000 0
+0.720000 0
+0.740000 0
+0.760000 0
+0.780000 0
+0.800000 0
+0.820000 0
+0.840000 0
+0.860000 0
+0.880000 0
+0.900000 0
+0.920000 0
+0.940000 0
+0.960000 0
+0.980000 0
+1.000000 0
+1.020000 0
+1.040000 0
+1.060000 0
+1.080000 0
+1.100000 0
+1.120000 0
+1.140000 0
+1.160000 0
+1.180000 0
+1.200000 0
+1.220000 0
+1.240000 0
+1.260000 0
+1.280000 0
+1.300000 0
+1.320000 0
+1.340000 0
+1.360000 0
+1.380000 0
+1.400000 0
+1.420000 0
+1.440000 0
+1.460000 0
+1.480000 0
+1.500000 0
+1.520000 0
+1.540000 0
+1.560000 0
+1.580000 0
+1.600000 0
+1.620000 0
+1.640000 0
+1.660000 0
+1.680000 0
+1.700000 0
+1.720000 0
+1.740000 0
+1.760000 0
+1.780000 0
+1.800000 0
+1.820000 0
+1.840000 0
+1.860000 0
+1.880000 0
+1.900000 0
+1.920000 0
+1.940000 0
+1.960000 0
+1.980000 0
+2.000000 0
+2.020000 0
+2.040000 0
+2.060000 0
+2.080000 0
+2.100000 0
+2.120000 0
+2.140000 0
+2.160000 0
+2.180000 0
+2.200000 0
+2.220000 0
+2.240000 0
+2.260000 0
+2.280000 0
+2.300000 0
+2.320000 0
+2.340000 0
+2.360000 0
+2.380000 0
+2.400000 0
+2.420000 0
+2.440000 0
+2.460000 0
+2.480000 0
+2.500000 0
+2.520000 0
+2.540000 0
+2.560000 0
+2.580000 0
+2.600000 0
+2.620000 0
+2.640000 0
+2.660000 0
+2.680000 0
+2.700000 0
+2.720000 0
+2.740000 0
+2.760000 0
+2.780000 0
+2.800000 0
+2.820000 0
+2.840000 0
+2.860000 0
+2.880000 0
+2.900000 0
+2.920000 0
+2.940000 0
+2.960000 0
+2.980000 0
+3.000000 0
+3.020000 0
+3.040000 0
+3.060000 0
+3.080000 0
+3.100000 0
+3.120000 0
+3.140000 0
+3.160000 0
+3.180000 0
+3.200000 0
+3.220000 0
+3.240000 0
+3.260000 0
+3.280000 0
+3.300000 0
+3.320000 0
+3.340000 0
+3.360000 0
+3.380000 0
+3.400000 0
+3.420000 0
+3.440000 0
+3.460000 0
+3.480000 0
+3.500000 0
+3.520000 0
+3.540000 0
+3.560000 0
+3.580000 0
+3.600000 0
+3.620000 0
+3.640000 0
+3.660000 0
+3.680000 0
+3.700000 0
+3.720000 0
+3.740000 0
+3.760000 0
+3.780000 0
+3.800000 0
+3.820000 0
+3.840000 0
+3.860000 0
+3.880000 0
+3.900000 0
+3.920000 0
+3.940000 0
+3.960000 0
+3.980000 0
+4.000000 0
+4.020000 0
+4.040000 0
+4.060000 0
+4.080000 0
+4.100000 0
+4.120000 0
+4.140000 0
+4.160000 0
+4.180000 0
+4.200000 0
+4.220000 0
+4.240000 0
+4.260000 0
+4.280000 0
+4.300000 0
+4.320000 0
+4.340000 0
+4.360000 0
+4.380000 0
+4.400000 0
+4.420000 0
+4.440000 0
+4.460000 0
+4.480000 0
+4.500000 0
+4.520000 0
+4.540000 0
+4.560000 0
+4.580000 0
+4.600000 0
+4.620000 0
+4.640000 0
+4.660000 0
+4.680000 0
+4.700000 0
+4.720000 0
+4.740000 0
+4.760000 0
+4.780000 0
+4.800000 0
+4.820000 0
+4.840000 0
+4.860000 0
+4.880000 0
+4.900000 0
+4.920000 0
+4.940000 0
+4.960000 0
+4.980000 0
+5.000000 0
+5.020000 0
+5.040000 0
+5.060000 0
+5.080000 0
+5.100000 0
+5.120000 0
+5.140000 0
+5.160000 0
+5.180000 0
+5.200000 0
+5.220000 0
+5.240000 0
+5.260000 0
+5.280000 0
+5.300000 0
+5.320000 0
+5.340000 0
+5.360000 0
+5.380000 0
+5.400000 0
+5.420000 0
+5.440000 0
+5.460000 0
+5.480000 0
+5.500000 0
+5.520000 0
+5.540000 0
+5.560000 0
+5.580000 0
+5.600000 0
+5.620000 0
+5.640000 0
+5.660000 0
+5.680000 0
+5.700000 0
+5.720000 0
+5.740000 0
+5.760000 0
+5.780000 0
+5.800000 0
+5.820000 0
+5.840000 0
+5.860000 0
+5.880000 0
+5.900000 0
+5.920000 0
+5.940000 0
+5.960000 0
+5.980000 0
+6.000000 0
+6.020000 0
+6.040000 0
+6.060000 0
+6.080000 0
+6.100000 0
+6.120000 0
+6.140000 0
+6.160000 0
+6.180000 0
+6.200000 0
+6.220000 0
+6.240000 0
+6.260000 0
+6.280000 0
+6.300000 0
+6.320000 0
+6.340000 0
+6.360000 0
+6.380000 0
+6.400000 0
+6.420000 0
+6.440000 0
+6.460000 0
+6.480000 0
+6.500000 0
+6.520000 0
+6.540000 0
+6.560000 0
+6.580000 0
+6.600000 0
+6.620000 0
+6.640000 0
+6.660000 0
+6.680000 0
+6.700000 0
+6.720000 0
+6.740000 0
+6.760000 0
+6.780000 0
+6.800000 0
+6.820000 0
+6.840000 0
+6.860000 0
+6.880000 0
+6.900000 0
+6.920000 0
+6.940000 0
+6.960000 0
+6.980000 0
+7.000000 0
+7.020000 0
+7.040000 0
+7.060000 0
+7.080000 0
+7.100000 0
+7.120000 0
+7.140000 0
+7.160000 0
+7.180000 0
+7.200000 0
+7.220000 0
+7.240000 0
+7.260000 0
+7.280000 0
+7.300000 0
+7.320000 0
+7.340000 0
+7.360000 0
+7.380000 0
+7.400000 0
+7.420000 0
+7.440000 0
+7.460000 0
+7.480000 0
+7.500000 0
+7.520000 0
+7.540000 0
+7.560000 0
+7.580000 0
+7.600000 0
+7.620000 0
+7.640000 0
+7.660000 0
+7.680000 0
+7.700000 0
+7.720000 0
+7.740000 0
+7.760000 0
+7.780000 0
+7.800000 0
+7.820000 0
+7.840000 0
+7.860000 0
+7.880000 0
+7.900000 0
+7.920000 0
+7.940000 0
+7.960000 0
+7.980000 0
+8.000000 0
+8.020000 0
+8.040000 0
+8.060000 0
+8.080000 0
+8.100000 0
+8.120000 0
+8.140000 0
+8.160000 0
+8.180000 0
+8.200000 0
+8.220000 0
+8.240000 0
+8.260000 0
+8.280000 0
+8.300000 0
+8.320000 0
+8.340000 0
+8.360000 0
+8.380000 0
+8.400000 0
+8.420000 0
+8.440000 0
+8.460000 0
+8.480000 0
+8.500000 0
+8.520000 0
+8.540000 0
+8.560000 0
+8.580000 0
+8.600000 0
+8.620000 0
+8.640000 0
+8.660000 0
+8.680000 0
+8.700000 0
+8.720000 0
+8.740000 0
+8.760000 0
+8.780000 0
+8.800000 0
+8.820000 0
+8.840000 0
+8.860000 0
+8.880000 0
+8.900000 0
+8.920000 0
+8.940000 0
+8.960000 0
+8.980000 0
+9.000000 0
+9.020000 0
+9.040000 0
+9.060000 0
+9.080000 0
+9.100000 0
+9.120000 0
+9.140000 0
+9.160000 0
+9.180000 0
+9.200000 0
+9.220000 0
+9.240000 0
+9.260000 0
+9.280000 0
+9.300000 0
+9.320000 0
+9.340000 0
+9.360000 0
+9.380000 0
+9.400000 0
+9.420000 0
+9.440000 0
+9.460000 0
+9.480000 0
+9.500000 0
+9.520000 0
+9.540000 0
+9.560000 0
+9.580000 0
+9.600000 0
+9.620000 0
+9.640000 0
+9.660000 0
+9.680000 0
+9.700000 0
+9.720000 0
+9.740000 0
+9.760000 0
+9.780000 0
+9.800000 0
+9.820000 0
+9.840000 0
+9.860000 0
+9.880000 0
+9.900000 0
+9.920000 0
+9.940000 0
+9.960000 0
+9.980000 0
+10.000000 0
+10.020000 0
+10.040000 0
+10.060000 0
+10.080000 0
+10.100000 0
+10.120000 0
+10.140000 0
+10.160000 0
+10.180000 0
+10.200000 0
+10.220000 0
+10.240000 0
+10.260000 0
+10.280000 0
+10.300000 0
+10.320000 0
+10.340000 0
+10.360000 0
+10.380000 0
+10.400000 0
+10.420000 0
+10.440000 0
+10.460000 0
+10.480000 0
+10.500000 0
+10.520000 0
+10.540000 0
+10.560000 0
+10.580000 0
+10.600000 0
+10.620000 0
+10.640000 0
+10.660000 0
+10.680000 0
+10.700000 0
+10.720000 0
+10.740000 0
+10.760000 0
+10.780000 0
+10.800000 0
+10.820000 0
+10.840000 0
+10.860000 0
+10.880000 0
+10.900000 0
+10.920000 0
+10.940000 0
+10.960000 0
+10.980000 0
+11.000000 0
+11.020000 0
+11.040000 0
+11.060000 0
+11.080000 0
+11.100000 0
+11.120000 0
+11.140000 0
+11.160000 0
+11.180000 0
+11.200000 0
+11.220000 0
+11.240000 0
+11.260000 0
+11.280000 0
+11.300000 0
+11.320000 0
+11.340000 0
+11.360000 0
+11.380000 0
+11.400000 0
+11.420000 0
+11.440000 0
+11.460000 0
+11.480000 0
+11.500000 0
+11.520000 0
+11.540000 0
+11.560000 0
+11.580000 0
+11.600000 0
+11.620000 0
+11.640000 0
+11.660000 0
+11.680000 0
+11.700000 0
+11.720000 0
+11.740000 0
+11.760000 0
+11.780000 0
+11.800000 0
+11.820000 0
+11.840000 0
+11.860000 0
+11.880000 0
+11.900000 0
+11.920000 0
+11.940000 0
+11.960000 0
+11.980000 0
+12.000000 0
+12.020000 0
+12.040000 0
+12.060000 0
+12.080000 0
+12.100000 0
+12.120000 0
+12.140000 0
+12.160000 0
+12.180000 0
+12.200000 0
+12.220000 0
+12.240000 0
+12.260000 0
+12.280000 0
+12.300000 0
+12.320000 0
+12.340000 0
+12.360000 0
+12.380000 0
+12.400000 0
+12.420000 0
+12.440000 0
+12.460000 0
+12.480000 0
+12.500000 0
+12.520000 0
+12.540000 0
+12.560000 0
+12.580000 0
+12.600000 0
+12.620000 0
+12.640000 0
+12.660000 0
+12.680000 0
+12.700000 0
+12.720000 0
+12.740000 0
+12.760000 0
+12.780000 0
+12.800000 0
+12.820000 0
+12.840000 0
+12.860000 0
+12.880000 0
+12.900000 0
+12.920000 0
+12.940000 0
+12.960000 0
+12.980000 0
+13.000000 0
+13.020000 0
+13.040000 0
+13.060000 0
+13.080000 0
+13.100000 0
+13.120000 0
+13.140000 0
+13.160000 0
+13.180000 0
+13.200000 0
+13.220000 0
+13.240000 0
+13.260000 0
+13.280000 0
+13.300000 0
+13.320000 0
+13.340000 0
+13.360000 0
+13.380000 0
+13.400000 0
+13.420000 0
+13.440000 0
+13.460000 0
+13.480000 0
+13.500000 0
+13.520000 0
+13.540000 0
+13.560000 0
+13.580000 0
+13.600000 0
+13.620000 0
+13.640000 0
+13.660000 0
+13.680000 0
+13.700000 0
+13.720000 0
+13.740000 0
+13.760000 0
+13.780000 0
+13.800000 0
+13.820000 0
+13.840000 0
+13.860000 0
+13.880000 0
+13.900000 0
+13.920000 0
+13.940000 0
+13.960000 0
+13.980000 0
+14.000000 0
+14.020000 0
+14.040000 0
+14.060000 0
+14.080000 0
+14.100000 0
+14.120000 0
+14.140000 0
+14.160000 0
+14.180000 0
+14.200000 0
+14.220000 0
+14.240000 0
+14.260000 0
+14.280000 0
+14.300000 0
+14.320000 0
+14.340000 0
+14.360000 0
+14.380000 0
+14.400000 0
+14.420000 0
+14.440000 0
+14.460000 0
+14.480000 0
+14.500000 0
+14.520000 0
+14.540000 0
+14.560000 0
+14.580000 0
+14.600000 0
+14.620000 0
+14.640000 0
+14.660000 0
+14.680000 0
+14.700000 0
+14.720000 0
+14.740000 0
+14.760000 0
+14.780000 0
+14.800000 0
+14.820000 0
+14.840000 0
+14.860000 0
+14.880000 0
+14.900000 0
+14.920000 0
+14.940000 0
+14.960000 0
+14.980000 0
+15.000000 0
+15.020000 0
+15.040000 0
+15.060000 0
+15.080000 0
+15.100000 0
+15.120000 0
+15.140000 0
+15.160000 0
+15.180000 0
+15.200000 0
+15.220000 0
+15.240000 0
+15.260000 0
+15.280000 0
+15.300000 0
+15.320000 0
+15.340000 0
+15.360000 0
+15.380000 0
+15.400000 0
+15.420000 0
+15.440000 0
+15.460000 0
+15.480000 0
+15.500000 0
+15.520000 0
+15.540000 0
+15.560000 0
+15.580000 0
+15.600000 0
+15.620000 0
+15.640000 0
+15.660000 0
+15.680000 0
+15.700000 0
+15.720000 0
+15.740000 0
+15.760000 0
+15.780000 0
+15.800000 0
+15.820000 0
+15.840000 0
+15.860000 0
+15.880000 0
+15.900000 0
+15.920000 0
+15.940000 0
+15.960000 0
+15.980000 0
+16.000000 0
+16.020000 0
+16.040000 0
+16.060000 0
+16.080000 0
+16.100000 0
+16.120000 0
+16.140000 0
+16.160000 0
+16.180000 0
+16.200000 0
+16.220000 0
+16.240000 0
+16.260000 0
+16.280000 0
+16.300000 0
+16.320000 0
+16.340000 0
+16.360000 0
+16.380000 0
+16.400000 0
+16.420000 0
+16.440000 0
+16.460000 0
+16.480000 0
+16.500000 0
+16.520000 0
+16.540000 0
+16.560000 0
+16.580000 0
+16.600000 0
+16.620000 0
+16.640000 0
+16.660000 0
+16.680000 0
+16.700000 0
+16.720000 0
+16.740000 0
+16.760000 0
+16.780000 0
+16.800000 0
+16.820000 0
+16.840000 0
+16.860000 0
+16.880000 0
+16.900000 0
+16.920000 0
+16.940000 0
+16.960000 0
+16.980000 0
+17.000000 0
+17.020000 0
+17.040000 0
+17.060000 0
+17.080000 0
+17.100000 0
+17.120000 0
+17.140000 0
+17.160000 0
+17.180000 0
+17.200000 0
+17.220000 0
+17.240000 0
+17.260000 0
+17.280000 0
+17.300000 0
+17.320000 0
+17.340000 0
+17.360000 0
+17.380000 0
+17.400000 0
+17.420000 0
+17.440000 0
+17.460000 0
+17.480000 0
+17.500000 0
+17.520000 0
+17.540000 0
+17.560000 0
+17.580000 0
+17.600000 0
+17.620000 0
+17.640000 0
+17.660000 0
+17.680000 0
+17.700000 0
+17.720000 0
+17.740000 0
+17.760000 0
+17.780000 0
+17.800000 0
+17.820000 0
+17.840000 0
+17.860000 0
+17.880000 0
+17.900000 0
+17.920000 0
+17.940000 0
+17.960000 0
+17.980000 0
+18.000000 0
+18.020000 0
+18.040000 0
+18.060000 0
+18.080000 0
+18.100000 0
+18.120000 0
+18.140000 0
+18.160000 0
+18.180000 0
+18.200000 0
+18.220000 0
+18.240000 0
+18.260000 0
+18.280000 0
+18.300000 0
+18.320000 0
+18.340000 0
+18.360000 0
+18.380000 0
+18.400000 0
+18.420000 0
+18.440000 0
+18.460000 0
+18.480000 0
+18.500000 0
+18.520000 0
+18.540000 0
+18.560000 0
+18.580000 0
+18.600000 0
+18.620000 0
+18.640000 0
+18.660000 0
+18.680000 0
+18.700000 0
+18.720000 0
+18.740000 0
+18.760000 0
+18.780000 0
+18.800000 0
+18.820000 0
+18.840000 0
+18.860000 0
+18.880000 0
+18.900000 0
+18.920000 0
+18.940000 0
+18.960000 0
+18.980000 0
+19.000000 0
+19.020000 0
+19.040000 0
+19.060000 0
+19.080000 0
+19.100000 0
+19.120000 0
+19.140000 0
+19.160000 0
+19.180000 0
+19.200000 0
+19.220000 0
+19.240000 0
+19.260000 0
+19.280000 0
+19.300000 0
+19.320000 0
+19.340000 0
+19.360000 0
+19.380000 0
+19.400000 0
+19.420000 0
+19.440000 0
+19.460000 0
+19.480000 0
+19.500000 0
+19.520000 0
+19.540000 0
+19.560000 0
+19.580000 0
+19.600000 0
+19.620000 0
+19.640000 0
+19.660000 0
+19.680000 0
+19.700000 0
+19.720000 0
+19.740000 0
+19.760000 0
+19.780000 0
+19.800000 0
+19.820000 0
+19.840000 0
+19.860000 0
+19.880000 0
+19.900000 0
+19.920000 0
+19.940000 0
+19.960000 0
+19.980000 0
+20.000000 0
+20.020000 0
+20.040000 0
+20.060000 0
+20.080000 0
+20.100000 0
+20.120000 0
+20.140000 0
+20.160000 0
+20.180000 0
+20.200000 0
+20.220000 0
+20.240000 0
+20.260000 0
+20.280000 0
+20.300000 0
+20.320000 0
+20.340000 0
+20.360000 0
+20.380000 0
+20.400000 0
+20.420000 0
+20.440000 0
+20.460000 0
+20.480000 0
+20.500000 0
+20.520000 0
+20.540000 0
+20.560000 0
+20.580000 0
+20.600000 0
+20.620000 0
+20.640000 0
+20.660000 0
+20.680000 0
+20.700000 0
+20.720000 0
+20.740000 0
+20.760000 0
+20.780000 0
+20.800000 0
+20.820000 0
+20.840000 0
+20.860000 0
+20.880000 0
+20.900000 0
+20.920000 0
+20.940000 0
+20.960000 0
+20.980000 0
+21.000000 0
+21.020000 0
+21.040000 0
+21.060000 0
+21.080000 0
+21.100000 0
+21.120000 0
+21.140000 0
+21.160000 0
+21.180000 0
+21.200000 0
+21.220000 0
+21.240000 0
+21.260000 0
+21.280000 0
+21.300000 0
+21.320000 0
+21.340000 0
+21.360000 0
+21.380000 0
+21.400000 0
+21.420000 0
+21.440000 0
+21.460000 0
+21.480000 0
+21.500000 0
+21.520000 0
+21.540000 0
+21.560000 0
+21.580000 0
+21.600000 0
+21.620000 0
+21.640000 0
+21.660000 0
+21.680000 0
+21.700000 0
+21.720000 0
+21.740000 0
+21.760000 0
+21.780000 0
+21.800000 0
+21.820000 0
+21.840000 0
+21.860000 0
+21.880000 0
+21.900000 0
+21.920000 0
+21.940000 0
+21.960000 0
+21.980000 0
+22.000000 0
+22.020000 0
+22.040000 0
+22.060000 0
+22.080000 0
+22.100000 0
+22.120000 0
+22.140000 0
+22.160000 0
+22.180000 0
+22.200000 0
+22.220000 0
+22.240000 0
+22.260000 0
+22.280000 0
+22.300000 0
+22.320000 0
+22.340000 0
+22.360000 0
+22.380000 0
+22.400000 0
+22.420000 0
+22.440000 0
+22.460000 0
+22.480000 0
+22.500000 0
+22.520000 0
+22.540000 0
+22.560000 0
+22.580000 0
+22.600000 0
+22.620000 0
+22.640000 0
+22.660000 0
+22.680000 0
+22.700000 0
+22.720000 0
+22.740000 0
+22.760000 0
+22.780000 0
+22.800000 0
+22.820000 0
+22.840000 0
+22.860000 0
+22.880000 0
+22.900000 0
+22.920000 0
+22.940000 0
+22.960000 0
+22.980000 0
+23.000000 0
+23.020000 0
+23.040000 0
+23.060000 0
+23.080000 0
+23.100000 0
+23.120000 0
+23.140000 0
+23.160000 0
+23.180000 0
+23.200000 0
+23.220000 0
+23.240000 0
+23.260000 0
+23.280000 0
+23.300000 0
+23.320000 0
+23.340000 0
+23.360000 0
+23.380000 0
+23.400000 0
+23.420000 0
+23.440000 0
+23.460000 0
+23.480000 0
+23.500000 0
+23.520000 0
+23.540000 0
+23.560000 0
+23.580000 0
+23.600000 0
+23.620000 0
+23.640000 0
+23.660000 0
+23.680000 0
+23.700000 0
+23.720000 0
+23.740000 0
+23.760000 0
+23.780000 0
+23.800000 0
+23.820000 0
+23.840000 0
+23.860000 0
+23.880000 0
+23.900000 0
+23.920000 0
+23.940000 0
+23.960000 0
+23.980000 0
+24.000000 0
+24.020000 0
+24.040000 0
+24.060000 0
+24.080000 0
+24.100000 0
+24.120000 0
+24.140000 0
+24.160000 0
+24.180000 0
+24.200000 0
+24.220000 0
+24.240000 0
+24.260000 0
+24.280000 0
+24.300000 0
+24.320000 0
+24.340000 0
+24.360000 0
+24.380000 0
+24.400000 0
+24.420000 0
+24.440000 0
+24.460000 0
+24.480000 0
+24.500000 0
+24.520000 0
+24.540000 0
+24.560000 0
+24.580000 0
+24.600000 0
+24.620000 0
+24.640000 0
+24.660000 0
+24.680000 0
+24.700000 0
+24.720000 0
+24.740000 0
+24.760000 0
+24.780000 0
+24.800000 0
+24.820000 0
+24.840000 0
+24.860000 0
+24.880000 0
+24.900000 0
+24.920000 0
+24.940000 0
+24.960000 0
+24.980000 0
+25.000000 0
+25.020000 0
+25.040000 0
+25.060000 0
+25.080000 0
+25.100000 0
+25.120000 0
+25.140000 0
+25.160000 0
+25.180000 0
+25.200000 0
+25.220000 0
+25.240000 0
+25.260000 0
+25.280000 0
+25.300000 0
+25.320000 0
+25.340000 0
+25.360000 0
+25.380000 0
+25.400000 0
+25.420000 0
+25.440000 0
+25.460000 0
+25.480000 0
+25.500000 0
+25.520000 0
+25.540000 0
+25.560000 0
+25.580000 0
+25.600000 0
+25.620000 0
+25.640000 0
+25.660000 0
+25.680000 0
+25.700000 0
+25.720000 0
+25.740000 0
+25.760000 0
+25.780000 0
+25.800000 0
+25.820000 0
+25.840000 0
+25.860000 0
+25.880000 0
+25.900000 0
+25.920000 0
+25.940000 0
+25.960000 0
+25.980000 0
+26.000000 0
+26.020000 0
+26.040000 0
+26.060000 0
+26.080000 0
+26.100000 0
+26.120000 0
+26.140000 0
+26.160000 0
+26.180000 0
+26.200000 0
+26.220000 0
+26.240000 0
+26.260000 0
+26.280000 0
+26.300000 0
+26.320000 0
+26.340000 0
+26.360000 0
+26.380000 0
+26.400000 0
+26.420000 0
+26.440000 0
+26.460000 0
+26.480000 0
+26.500000 0
+26.520000 0
+26.540000 0
+26.560000 0
+26.580000 0
+26.600000 0
+26.620000 0
+26.640000 0
+26.660000 0
+26.680000 0
+26.700000 0
+26.720000 0
+26.740000 0
+26.760000 0
+26.780000 0
+26.800000 0
+26.820000 0
+26.840000 0
+26.860000 0
+26.880000 0
+26.900000 0
+26.920000 0
+26.940000 0
+26.960000 0
+26.980000 0
+27.000000 0
+27.020000 0
+27.040000 0
+27.060000 0
+27.080000 0
+27.100000 0
+27.120000 0
+27.140000 0
+27.160000 0
+27.180000 0
+27.200000 0
+27.220000 0
+27.240000 0
+27.260000 0
+27.280000 0
+27.300000 0
+27.320000 0
+27.340000 0
+27.360000 0
+27.380000 0
+27.400000 0
+27.420000 0
+27.440000 0
+27.460000 0
+27.480000 0
+27.500000 0
+27.520000 0
+27.540000 0
+27.560000 0
+27.580000 0
+27.600000 0
+27.620000 0
+27.640000 0
+27.660000 0
+27.680000 0
+27.700000 0
+27.720000 0
+27.740000 0
+27.760000 0
+27.780000 0
+27.800000 0
+27.820000 0
+27.840000 0
+27.860000 0
+27.880000 0
+27.900000 0
+27.920000 0
+27.940000 0
+27.960000 0
+27.980000 0
+28.000000 0
+28.020000 0
+28.040000 0
+28.060000 0
+28.080000 0
+28.100000 0
+28.120000 0
+28.140000 0
+28.160000 0
+28.180000 0
+28.200000 0
+28.220000 0
+28.240000 0
+28.260000 0
+28.280000 0
+28.300000 0
+28.320000 0
+28.340000 0
+28.360000 0
+28.380000 0
+28.400000 0
+28.420000 0
+28.440000 0
+28.460000 0
+28.480000 0
+28.500000 0
+28.520000 0
+28.540000 0
+28.560000 0
+28.580000 0
+28.600000 0
+28.620000 0
+28.640000 0
+28.660000 0
+28.680000 0
+28.700000 0
+28.720000 0
+28.740000 0
+28.760000 0
+28.780000 0
+28.800000 0
+28.820000 0
+28.840000 0
+28.860000 0
+28.880000 0
+28.900000 0
+28.920000 0
+28.940000 0
+28.960000 0
+28.980000 0
+29.000000 0
+29.020000 0
+29.040000 0
+29.060000 0
+29.080000 0
+29.100000 0
+29.120000 0
+29.140000 0
+29.160000 0
+29.180000 0
+29.200000 0
+29.220000 0
+29.240000 0
+29.260000 0
+29.280000 0
+29.300000 0
+29.320000 0
+29.340000 0
+29.360000 0
+29.380000 0
+29.400000 0
+29.420000 0
+29.440000 0
+29.460000 0
+29.480000 0
+29.500000 0
+29.520000 0
+29.540000 0
+29.560000 0
+29.580000 0
+29.600000 0
+29.620000 0
+29.640000 0
+29.660000 0
+29.680000 0
+29.700000 0
+29.720000 0
+29.740000 0
+29.760000 0
+29.780000 0
+29.800000 0
+29.820000 0
+29.840000 0
+29.860000 0
+29.880000 0
+29.900000 0
+29.920000 0
+29.940000 0
+29.960000 0
+29.980000 0
+30.000000 0
+30.020000 0
+30.040000 0
+30.060000 0
+30.080000 0
+30.100000 0
+30.120000 0
+30.140000 0
+30.160000 0
+30.180000 0
+30.200000 0
+30.220000 0
+30.240000 0
+30.260000 0
+30.280000 0
+30.300000 0
+30.320000 0
+30.340000 0
+30.360000 0
+30.380000 0
+30.400000 0
+30.420000 0
+30.440000 0
+30.460000 0
+30.480000 0
+30.500000 0
+30.520000 0
+30.540000 0
+30.560000 0
+30.580000 0
+30.600000 0
+30.620000 0
+30.640000 0
+30.660000 0
+30.680000 0
+30.700000 0
+30.720000 0
+30.740000 0
+30.760000 0
+30.780000 0
+30.800000 0
+30.820000 0
+30.840000 0
+30.860000 0
+30.880000 0
+30.900000 0
+30.920000 0
+30.940000 0
+30.960000 0
+30.980000 0
+31.000000 0
+31.020000 0
+31.040000 0
+31.060000 0
+31.080000 0
+31.100000 0
+31.120000 0
+31.140000 0
+31.160000 0
+31.180000 0
+31.200000 0
+31.220000 0
+31.240000 0
+31.260000 0
+31.280000 0
+31.300000 0
+31.320000 0
+31.340000 0
+31.360000 0
+31.380000 0
+31.400000 0
+31.420000 0
+31.440000 0
+31.460000 0
+31.480000 0
+31.500000 0
+31.520000 0
+31.540000 0
+31.560000 0
+31.580000 0
+31.600000 0
+31.620000 0
+31.640000 0
+31.660000 0
+31.680000 0
+31.700000 0
+31.720000 0
+31.740000 0
+31.760000 0
+31.780000 0
+31.800000 0
+31.820000 0
+31.840000 0
+31.860000 0
+31.880000 0
+31.900000 0
+31.920000 0
+31.940000 0
+31.960000 0
+31.980000 0
+32.000000 0
+32.020000 0
+32.040000 0
+32.060000 0
+32.080000 0
+32.100000 0
+32.120000 0
+32.140000 0
+32.160000 0
+32.180000 0
+32.200000 0
+32.220000 0
+32.240000 0
+32.260000 0
+32.280000 0
+32.300000 0
+32.320000 0
+32.340000 0
+32.360000 0
+32.380000 0
+32.400000 0
+32.420000 0
+32.440000 0
+32.460000 0
+32.480000 0
+32.500000 0
+32.520000 0
+32.540000 0
+32.560000 0
+32.580000 0
+32.600000 0
+32.620000 0
+32.640000 0
+32.660000 0
+32.680000 0
+32.700000 0
+32.720000 0
+32.740000 0
+32.760000 0
+32.780000 0
+32.800000 0
+32.820000 0
+32.840000 0
+32.860000 0
+32.880000 0
+32.900000 0
+32.920000 0
+32.940000 0
+32.960000 0
+32.980000 0
+33.000000 0
+33.020000 0
+33.040000 0
+33.060000 0
+33.080000 0
+33.100000 0
+33.120000 0
+33.140000 0
+33.160000 0
+33.180000 0
+33.200000 0
+33.220000 0
+33.240000 0
+33.260000 0
+33.280000 0
+33.300000 0
+33.320000 0
+33.340000 0
+33.360000 0
+33.380000 0
+33.400000 0
+33.420000 0
+33.440000 0
+33.460000 0
+33.480000 0
+33.500000 0
+33.520000 0
+33.540000 0
+33.560000 0
+33.580000 0
+33.600000 0
+33.620000 0
+33.640000 0
+33.660000 0
+33.680000 0
+33.700000 0
+33.720000 0
+33.740000 0
+33.760000 0
+33.780000 0
+33.800000 0
+33.820000 0
+33.840000 0
+33.860000 0
+33.880000 0
+33.900000 0
+33.920000 0
+33.940000 0
+33.960000 0
+33.980000 0
+34.000000 0
+34.020000 0
+34.040000 0
+34.060000 0
+34.080000 0
+34.100000 0
+34.120000 0
+34.140000 0
+34.160000 0
+34.180000 0
+34.200000 0
+34.220000 0
+34.240000 0
+34.260000 0
+34.280000 0
+34.300000 0
+34.320000 0
+34.340000 0
+34.360000 0
+34.380000 0
+34.400000 0
+34.420000 0
+34.440000 0
+34.460000 0
+34.480000 0
+34.500000 0
+34.520000 0
+34.540000 0
+34.560000 0
+34.580000 0
+34.600000 0
+34.620000 0
+34.640000 0
+34.660000 0
+34.680000 0
+34.700000 0
+34.720000 0
+34.740000 0
+34.760000 0
+34.780000 0
+34.800000 0
+34.820000 0
+34.840000 0
+34.860000 0
+34.880000 0
+34.900000 0
+34.920000 0
+34.940000 0
+34.960000 0
+34.980000 0
+35.000000 0
+35.020000 0
+35.040000 0
+35.060000 0
+35.080000 0
+35.100000 0
+35.120000 0
+35.140000 0
+35.160000 0
+35.180000 0
+35.200000 0
+35.220000 0
+35.240000 0
+35.260000 0
+35.280000 0
+35.300000 0
+35.320000 0
+35.340000 0
+35.360000 0
+35.380000 0
+35.400000 0
+35.420000 0
+35.440000 0
+35.460000 0
+35.480000 0
+35.500000 0
+35.520000 0
+35.540000 0
+35.560000 0
+35.580000 0
+35.600000 0
+35.620000 0
+35.640000 0
+35.660000 0
+35.680000 0
+35.700000 0
+35.720000 0
+35.740000 0
+35.760000 0
+35.780000 0
+35.800000 0
+35.820000 0
+35.840000 0
+35.860000 0
+35.880000 0
+35.900000 0
+35.920000 0
+35.940000 0
+35.960000 0
+35.980000 0
+36.000000 0
+36.020000 0
+36.040000 0
+36.060000 0
+36.080000 0
+36.100000 0
+36.120000 0
+36.140000 0
+36.160000 0
+36.180000 0
+36.200000 0
+36.220000 0
+36.240000 0
+36.260000 0
+36.280000 0
+36.300000 0
+36.320000 0
+36.340000 0
+36.360000 0
+36.380000 0
+36.400000 0
+36.420000 0
+36.440000 0
+36.460000 0
+36.480000 0
+36.500000 0
+36.520000 0
+36.540000 0
+36.560000 0
+36.580000 0
+36.600000 0
+36.620000 0
+36.640000 0
+36.660000 0
+36.680000 0
+36.700000 0
+36.720000 0
+36.740000 0
+36.760000 0
+36.780000 0
+36.800000 0
+36.820000 0
+36.840000 0
+36.860000 0
+36.880000 0
+36.900000 0
+36.920000 0
+36.940000 0
+36.960000 0
+36.980000 0
+37.000000 0
+37.020000 0
+37.040000 0
+37.060000 0
+37.080000 0
+37.100000 0
+37.120000 0
+37.140000 0
+37.160000 0
+37.180000 0
+37.200000 0
+37.220000 0
+37.240000 0
+37.260000 0
+37.280000 0
+37.300000 0
+37.320000 0
+37.340000 0
+37.360000 0
+37.380000 0
+37.400000 0
+37.420000 0
+37.440000 0
+37.460000 0
+37.480000 0
+37.500000 0
+37.520000 0
+37.540000 0
+37.560000 0
+37.580000 0
+37.600000 0
+37.620000 0
+37.640000 0
+37.660000 0
+37.680000 0
+37.700000 0
+37.720000 0
+37.740000 0
+37.760000 0
+37.780000 0
+37.800000 0
+37.820000 0
+37.840000 0
+37.860000 0
+37.880000 0
+37.900000 0
+37.920000 0
+37.940000 0
+37.960000 0
+37.980000 0
+38.000000 0
+38.020000 0
+38.040000 0
+38.060000 0
+38.080000 0
+38.100000 0
+38.120000 0
+38.140000 0
+38.160000 0
+38.180000 0
+38.200000 0
+38.220000 0
+38.240000 0
+38.260000 0
+38.280000 0
+38.300000 0
+38.320000 0
+38.340000 0
+38.360000 0
+38.380000 0
+38.400000 0
+38.420000 0
+38.440000 0
+38.460000 0
+38.480000 0
+38.500000 0
+38.520000 0
+38.540000 0
+38.560000 0
+38.580000 0
+38.600000 0
+38.620000 0
+38.640000 0
+38.660000 0
+38.680000 0
+38.700000 0
+38.720000 0
+38.740000 0
+38.760000 0
+38.780000 0
+38.800000 0
+38.820000 0
+38.840000 0
+38.860000 0
+38.880000 0
+38.900000 0
+38.920000 0
+38.940000 0
+38.960000 0
+38.980000 0
+39.000000 0
+39.020000 0
+39.040000 0
+39.060000 0
+39.080000 0
+39.100000 0
+39.120000 0
+39.140000 0
+39.160000 0
+39.180000 0
+39.200000 0
+39.220000 0
+39.240000 0
+39.260000 0
+39.280000 0
+39.300000 0
+39.320000 0
+39.340000 0
+39.360000 0
+39.380000 0
+39.400000 0
+39.420000 0
+39.440000 0
+39.460000 0
+39.480000 0
+39.500000 0
+39.520000 0
+39.540000 0
+39.560000 0
+39.580000 0
+39.600000 0
+39.620000 0
+39.640000 0
+39.660000 0
+39.680000 0
+39.700000 0
+39.720000 0
+39.740000 0
+39.760000 0
+39.780000 0
+39.800000 0
+39.820000 0
+39.840000 0
+39.860000 0
+39.880000 0
+39.900000 0
+39.920000 0
+39.940000 0
+39.960000 0
+39.980000 0
+40.000000 0
+40.020000 0
+40.040000 0
+40.060000 0
+40.080000 0
+40.100000 0
+40.120000 0
+40.140000 0
+40.160000 0
+40.180000 0
+40.200000 0
+40.220000 0
+40.240000 0
+40.260000 0
+40.280000 0
+40.300000 0
+40.320000 0
+40.340000 0
+40.360000 0
+40.380000 0
+40.400000 0
+40.420000 0
+40.440000 0
+40.460000 0
+40.480000 0
+40.500000 0
+40.520000 0
+40.540000 0
+40.560000 0
+40.580000 0
+40.600000 0
+40.620000 0
+40.640000 0
+40.660000 0
+40.680000 0
+40.700000 0
+40.720000 0
+40.740000 0
+40.760000 0
+40.780000 0
+40.800000 0
+40.820000 0
+40.840000 0
+40.860000 0
+40.880000 0
+40.900000 0
+40.920000 0
+40.940000 0
+40.960000 0
+40.980000 0
+41.000000 0
+41.020000 0
+41.040000 0
+41.060000 0
+41.080000 0
+41.100000 0
+41.120000 0
+41.140000 0
+41.160000 0
+41.180000 0
+41.200000 0
+41.220000 0
+41.240000 0
+41.260000 0
+41.280000 0
+41.300000 0
+41.320000 0
+41.340000 0
+41.360000 0
+41.380000 0
+41.400000 0
+41.420000 0
+41.440000 0
+41.460000 0
+41.480000 0
+41.500000 0
+41.520000 0
+41.540000 0
+41.560000 0
+41.580000 0
+41.600000 0
+41.620000 0
+41.640000 0
+41.660000 0
+41.680000 0
+41.700000 0
+41.720000 0
+41.740000 0
+41.760000 0
+41.780000 0
+41.800000 0
+41.820000 0
+41.840000 0
+41.860000 0
+41.880000 0
+41.900000 0
+41.920000 0
+41.940000 0
+41.960000 0
+41.980000 0
+42.000000 0
+42.020000 0
+42.040000 0
+42.060000 0
+42.080000 0
+42.100000 0
+42.120000 0
+42.140000 0
+42.160000 0
+42.180000 0
+42.200000 0
+42.220000 0
+42.240000 0
+42.260000 0
+42.280000 0
+42.300000 0
+42.320000 0
+42.340000 0
+42.360000 0
+42.380000 0
+42.400000 0
+42.420000 0
+42.440000 0
+42.460000 0
+42.480000 0
+42.500000 0
+42.520000 0
+42.540000 0
+42.560000 0
+42.580000 0
+42.600000 0
+42.620000 0
+42.640000 0
+42.660000 0
+42.680000 0
+42.700000 0
+42.720000 0
+42.740000 0
+42.760000 0
+42.780000 0
+42.800000 0
+42.820000 0
+42.840000 0
+42.860000 0
+42.880000 0
+42.900000 0
+42.920000 0
+42.940000 0
+42.960000 0
+42.980000 0
+43.000000 0
+43.020000 0
+43.040000 0
+43.060000 0
+43.080000 0
+43.100000 0
+43.120000 0
+43.140000 0
+43.160000 0
+43.180000 0
+43.200000 0
+43.220000 0
+43.240000 0
+43.260000 0
+43.280000 0
+43.300000 0
+43.320000 0
+43.340000 0
+43.360000 0
+43.380000 0
+43.400000 0
+43.420000 0
+43.440000 0
+43.460000 0
+43.480000 0
+43.500000 0
+43.520000 0
+43.540000 0
+43.560000 0
+43.580000 0
+43.600000 0
+43.620000 0
+43.640000 0
+43.660000 0
+43.680000 0
+43.700000 0
+43.720000 0
+43.740000 0
+43.760000 0
+43.780000 0
+43.800000 0
+43.820000 0
+43.840000 0
+43.860000 0
+43.880000 0
+43.900000 0
+43.920000 0
+43.940000 0
+43.960000 0
+43.980000 0
+44.000000 0
+44.020000 0
+44.040000 0
+44.060000 0
+44.080000 0
+44.100000 0
+44.120000 0
+44.140000 0
+44.160000 0
+44.180000 0
+44.200000 0
+44.220000 0
+44.240000 0
+44.260000 0
+44.280000 0
+44.300000 0
+44.320000 0
+44.340000 0
+44.360000 0
+44.380000 0
+44.400000 0
+44.420000 0
+44.440000 0
+44.460000 0
+44.480000 0
+44.500000 0
+44.520000 0
+44.540000 0
+44.560000 0
+44.580000 0
+44.600000 0
+44.620000 0
+44.640000 0
+44.660000 0
+44.680000 0
+44.700000 0
+44.720000 0
+44.740000 0
+44.760000 0
+44.780000 0
+44.800000 0
+44.820000 0
+44.840000 0
+44.860000 0
+44.880000 0
+44.900000 0
+44.920000 0
+44.940000 0
+44.960000 0
+44.980000 0
+45.000000 0
+45.020000 0
+45.040000 0
+45.060000 0
+45.080000 0
+45.100000 0
+45.120000 0
+45.140000 0
+45.160000 0
+45.180000 0
+45.200000 0
+45.220000 0
+45.240000 0
+45.260000 0
+45.280000 0
+45.300000 0
+45.320000 0
+45.340000 0
+45.360000 0
+45.380000 0
+45.400000 0
+45.420000 0
+45.440000 0
+45.460000 0
+45.480000 0
+45.500000 0
+45.520000 0
+45.540000 0
+45.560000 0
+45.580000 0
+45.600000 0
+45.620000 0
+45.640000 0
+45.660000 0
+45.680000 0
+45.700000 0
+45.720000 0
+45.740000 0
+45.760000 0
+45.780000 0
+45.800000 0
+45.820000 0
+45.840000 0
+45.860000 0
+45.880000 0
+45.900000 0
+45.920000 0
+45.940000 0
+45.960000 0
+45.980000 0
+46.000000 0
+46.020000 0
+46.040000 0
+46.060000 0
+46.080000 0
+46.100000 0
+46.120000 0
+46.140000 0
+46.160000 0
+46.180000 0
+46.200000 0
+46.220000 0
+46.240000 0
+46.260000 0
+46.280000 0
+46.300000 0
+46.320000 0
+46.340000 0
+46.360000 0
+46.380000 0
+46.400000 0
+46.420000 0
+46.440000 0
+46.460000 0
+46.480000 0
+46.500000 0
+46.520000 0
+46.540000 0
+46.560000 0
+46.580000 0
+46.600000 0
+46.620000 0
+46.640000 0
+46.660000 0
+46.680000 0
+46.700000 0
+46.720000 0
+46.740000 0
+46.760000 0
+46.780000 0
+46.800000 0
+46.820000 0
+46.840000 0
+46.860000 0
+46.880000 0
+46.900000 0
+46.920000 0
+46.940000 0
+46.960000 0
+46.980000 0
+47.000000 0
+47.020000 0
+47.040000 0
+47.060000 0
+47.080000 0
+47.100000 0
+47.120000 0
+47.140000 0
+47.160000 0
+47.180000 0
+47.200000 0
+47.220000 0
+47.240000 0
+47.260000 0
+47.280000 0
+47.300000 0
+47.320000 0
+47.340000 0
+47.360000 0
+47.380000 0
+47.400000 0
+47.420000 0
+47.440000 0
+47.460000 0
+47.480000 0
+47.500000 0
+47.520000 0
+47.540000 0
+47.560000 0
+47.580000 0
+47.600000 0
+47.620000 0
+47.640000 0
+47.660000 0
+47.680000 0
+47.700000 0
+47.720000 0
+47.740000 0
+47.760000 0
+47.780000 0
+47.800000 0
+47.820000 0
+47.840000 0
+47.860000 0
+47.880000 0
+47.900000 0
+47.920000 0
+47.940000 0
+47.960000 0
+47.980000 0
+48.000000 0
+48.020000 0
+48.040000 0
+48.060000 0
+48.080000 0
+48.100000 0
+48.120000 0
+48.140000 0
+48.160000 0
+48.180000 0
+48.200000 0
+48.220000 0
+48.240000 0
+48.260000 0
+48.280000 0
+48.300000 0
+48.320000 0
+48.340000 0
+48.360000 0
+48.380000 0
+48.400000 0
+48.420000 0
+48.440000 0
+48.460000 0
+48.480000 0
+48.500000 0
+48.520000 0
+48.540000 0
+48.560000 0
+48.580000 0
+48.600000 0
+48.620000 0
+48.640000 0
+48.660000 0
+48.680000 0
+48.700000 0
+48.720000 0
+48.740000 0
+48.760000 0
+48.780000 0
+48.800000 0
+48.820000 0
+48.840000 0
+48.860000 0
+48.880000 0
+48.900000 0
+48.920000 0
+48.940000 0
+48.960000 0
+48.980000 0
+49.000000 0
+49.020000 0
+49.040000 0
+49.060000 0
+49.080000 0
+49.100000 0
+49.120000 0
+49.140000 0
+49.160000 0
+49.180000 0
+49.200000 0
+49.220000 0
+49.240000 0
+49.260000 0
+49.280000 0
+49.300000 0
+49.320000 0
+49.340000 0
+49.360000 0
+49.380000 0
+49.400000 0
+49.420000 0
+49.440000 0
+49.460000 0
+49.480000 0
+49.500000 0
+49.520000 0
+49.540000 0
+49.560000 0
+49.580000 0
+49.600000 0
+49.620000 0
+49.640000 0
+49.660000 0
+49.680000 0
+49.700000 0
+49.720000 0
+49.740000 0
+49.760000 0
+49.780000 0
+49.800000 0
+49.820000 0
+49.840000 0
+49.860000 0
+49.880000 0
+49.900000 0
+49.920000 0
+49.940000 0
+49.960000 0
+49.980000 0
diff --git a/mrdna/arbdmodel/resources/two_bead_model/zeroBPB.dat b/mrdna/arbdmodel/resources/two_bead_model/zeroBPB.dat
new file mode 100644
index 0000000000000000000000000000000000000000..f86c33577de28cafde51c0e67b8a146578a409c3
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/zeroBPB.dat
@@ -0,0 +1,2500 @@
+0.000000 0
+0.020000 0
+0.040000 0
+0.060000 0
+0.080000 0
+0.100000 0
+0.120000 0
+0.140000 0
+0.160000 0
+0.180000 0
+0.200000 0
+0.220000 0
+0.240000 0
+0.260000 0
+0.280000 0
+0.300000 0
+0.320000 0
+0.340000 0
+0.360000 0
+0.380000 0
+0.400000 0
+0.420000 0
+0.440000 0
+0.460000 0
+0.480000 0
+0.500000 0
+0.520000 0
+0.540000 0
+0.560000 0
+0.580000 0
+0.600000 0
+0.620000 0
+0.640000 0
+0.660000 0
+0.680000 0
+0.700000 0
+0.720000 0
+0.740000 0
+0.760000 0
+0.780000 0
+0.800000 0
+0.820000 0
+0.840000 0
+0.860000 0
+0.880000 0
+0.900000 0
+0.920000 0
+0.940000 0
+0.960000 0
+0.980000 0
+1.000000 0
+1.020000 0
+1.040000 0
+1.060000 0
+1.080000 0
+1.100000 0
+1.120000 0
+1.140000 0
+1.160000 0
+1.180000 0
+1.200000 0
+1.220000 0
+1.240000 0
+1.260000 0
+1.280000 0
+1.300000 0
+1.320000 0
+1.340000 0
+1.360000 0
+1.380000 0
+1.400000 0
+1.420000 0
+1.440000 0
+1.460000 0
+1.480000 0
+1.500000 0
+1.520000 0
+1.540000 0
+1.560000 0
+1.580000 0
+1.600000 0
+1.620000 0
+1.640000 0
+1.660000 0
+1.680000 0
+1.700000 0
+1.720000 0
+1.740000 0
+1.760000 0
+1.780000 0
+1.800000 0
+1.820000 0
+1.840000 0
+1.860000 0
+1.880000 0
+1.900000 0
+1.920000 0
+1.940000 0
+1.960000 0
+1.980000 0
+2.000000 0
+2.020000 0
+2.040000 0
+2.060000 0
+2.080000 0
+2.100000 0
+2.120000 0
+2.140000 0
+2.160000 0
+2.180000 0
+2.200000 0
+2.220000 0
+2.240000 0
+2.260000 0
+2.280000 0
+2.300000 0
+2.320000 0
+2.340000 0
+2.360000 0
+2.380000 0
+2.400000 0
+2.420000 0
+2.440000 0
+2.460000 0
+2.480000 0
+2.500000 0
+2.520000 0
+2.540000 0
+2.560000 0
+2.580000 0
+2.600000 0
+2.620000 0
+2.640000 0
+2.660000 0
+2.680000 0
+2.700000 0
+2.720000 0
+2.740000 0
+2.760000 0
+2.780000 0
+2.800000 0
+2.820000 0
+2.840000 0
+2.860000 0
+2.880000 0
+2.900000 0
+2.920000 0
+2.940000 0
+2.960000 0
+2.980000 0
+3.000000 0
+3.020000 0
+3.040000 0
+3.060000 0
+3.080000 0
+3.100000 0
+3.120000 0
+3.140000 0
+3.160000 0
+3.180000 0
+3.200000 0
+3.220000 0
+3.240000 0
+3.260000 0
+3.280000 0
+3.300000 0
+3.320000 0
+3.340000 0
+3.360000 0
+3.380000 0
+3.400000 0
+3.420000 0
+3.440000 0
+3.460000 0
+3.480000 0
+3.500000 0
+3.520000 0
+3.540000 0
+3.560000 0
+3.580000 0
+3.600000 0
+3.620000 0
+3.640000 0
+3.660000 0
+3.680000 0
+3.700000 0
+3.720000 0
+3.740000 0
+3.760000 0
+3.780000 0
+3.800000 0
+3.820000 0
+3.840000 0
+3.860000 0
+3.880000 0
+3.900000 0
+3.920000 0
+3.940000 0
+3.960000 0
+3.980000 0
+4.000000 0
+4.020000 0
+4.040000 0
+4.060000 0
+4.080000 0
+4.100000 0
+4.120000 0
+4.140000 0
+4.160000 0
+4.180000 0
+4.200000 0
+4.220000 0
+4.240000 0
+4.260000 0
+4.280000 0
+4.300000 0
+4.320000 0
+4.340000 0
+4.360000 0
+4.380000 0
+4.400000 0
+4.420000 0
+4.440000 0
+4.460000 0
+4.480000 0
+4.500000 0
+4.520000 0
+4.540000 0
+4.560000 0
+4.580000 0
+4.600000 0
+4.620000 0
+4.640000 0
+4.660000 0
+4.680000 0
+4.700000 0
+4.720000 0
+4.740000 0
+4.760000 0
+4.780000 0
+4.800000 0
+4.820000 0
+4.840000 0
+4.860000 0
+4.880000 0
+4.900000 0
+4.920000 0
+4.940000 0
+4.960000 0
+4.980000 0
+5.000000 0
+5.020000 0
+5.040000 0
+5.060000 0
+5.080000 0
+5.100000 0
+5.120000 0
+5.140000 0
+5.160000 0
+5.180000 0
+5.200000 0
+5.220000 0
+5.240000 0
+5.260000 0
+5.280000 0
+5.300000 0
+5.320000 0
+5.340000 0
+5.360000 0
+5.380000 0
+5.400000 0
+5.420000 0
+5.440000 0
+5.460000 0
+5.480000 0
+5.500000 0
+5.520000 0
+5.540000 0
+5.560000 0
+5.580000 0
+5.600000 0
+5.620000 0
+5.640000 0
+5.660000 0
+5.680000 0
+5.700000 0
+5.720000 0
+5.740000 0
+5.760000 0
+5.780000 0
+5.800000 0
+5.820000 0
+5.840000 0
+5.860000 0
+5.880000 0
+5.900000 0
+5.920000 0
+5.940000 0
+5.960000 0
+5.980000 0
+6.000000 0
+6.020000 0
+6.040000 0
+6.060000 0
+6.080000 0
+6.100000 0
+6.120000 0
+6.140000 0
+6.160000 0
+6.180000 0
+6.200000 0
+6.220000 0
+6.240000 0
+6.260000 0
+6.280000 0
+6.300000 0
+6.320000 0
+6.340000 0
+6.360000 0
+6.380000 0
+6.400000 0
+6.420000 0
+6.440000 0
+6.460000 0
+6.480000 0
+6.500000 0
+6.520000 0
+6.540000 0
+6.560000 0
+6.580000 0
+6.600000 0
+6.620000 0
+6.640000 0
+6.660000 0
+6.680000 0
+6.700000 0
+6.720000 0
+6.740000 0
+6.760000 0
+6.780000 0
+6.800000 0
+6.820000 0
+6.840000 0
+6.860000 0
+6.880000 0
+6.900000 0
+6.920000 0
+6.940000 0
+6.960000 0
+6.980000 0
+7.000000 0
+7.020000 0
+7.040000 0
+7.060000 0
+7.080000 0
+7.100000 0
+7.120000 0
+7.140000 0
+7.160000 0
+7.180000 0
+7.200000 0
+7.220000 0
+7.240000 0
+7.260000 0
+7.280000 0
+7.300000 0
+7.320000 0
+7.340000 0
+7.360000 0
+7.380000 0
+7.400000 0
+7.420000 0
+7.440000 0
+7.460000 0
+7.480000 0
+7.500000 0
+7.520000 0
+7.540000 0
+7.560000 0
+7.580000 0
+7.600000 0
+7.620000 0
+7.640000 0
+7.660000 0
+7.680000 0
+7.700000 0
+7.720000 0
+7.740000 0
+7.760000 0
+7.780000 0
+7.800000 0
+7.820000 0
+7.840000 0
+7.860000 0
+7.880000 0
+7.900000 0
+7.920000 0
+7.940000 0
+7.960000 0
+7.980000 0
+8.000000 0
+8.020000 0
+8.040000 0
+8.060000 0
+8.080000 0
+8.100000 0
+8.120000 0
+8.140000 0
+8.160000 0
+8.180000 0
+8.200000 0
+8.220000 0
+8.240000 0
+8.260000 0
+8.280000 0
+8.300000 0
+8.320000 0
+8.340000 0
+8.360000 0
+8.380000 0
+8.400000 0
+8.420000 0
+8.440000 0
+8.460000 0
+8.480000 0
+8.500000 0
+8.520000 0
+8.540000 0
+8.560000 0
+8.580000 0
+8.600000 0
+8.620000 0
+8.640000 0
+8.660000 0
+8.680000 0
+8.700000 0
+8.720000 0
+8.740000 0
+8.760000 0
+8.780000 0
+8.800000 0
+8.820000 0
+8.840000 0
+8.860000 0
+8.880000 0
+8.900000 0
+8.920000 0
+8.940000 0
+8.960000 0
+8.980000 0
+9.000000 0
+9.020000 0
+9.040000 0
+9.060000 0
+9.080000 0
+9.100000 0
+9.120000 0
+9.140000 0
+9.160000 0
+9.180000 0
+9.200000 0
+9.220000 0
+9.240000 0
+9.260000 0
+9.280000 0
+9.300000 0
+9.320000 0
+9.340000 0
+9.360000 0
+9.380000 0
+9.400000 0
+9.420000 0
+9.440000 0
+9.460000 0
+9.480000 0
+9.500000 0
+9.520000 0
+9.540000 0
+9.560000 0
+9.580000 0
+9.600000 0
+9.620000 0
+9.640000 0
+9.660000 0
+9.680000 0
+9.700000 0
+9.720000 0
+9.740000 0
+9.760000 0
+9.780000 0
+9.800000 0
+9.820000 0
+9.840000 0
+9.860000 0
+9.880000 0
+9.900000 0
+9.920000 0
+9.940000 0
+9.960000 0
+9.980000 0
+10.000000 0
+10.020000 0
+10.040000 0
+10.060000 0
+10.080000 0
+10.100000 0
+10.120000 0
+10.140000 0
+10.160000 0
+10.180000 0
+10.200000 0
+10.220000 0
+10.240000 0
+10.260000 0
+10.280000 0
+10.300000 0
+10.320000 0
+10.340000 0
+10.360000 0
+10.380000 0
+10.400000 0
+10.420000 0
+10.440000 0
+10.460000 0
+10.480000 0
+10.500000 0
+10.520000 0
+10.540000 0
+10.560000 0
+10.580000 0
+10.600000 0
+10.620000 0
+10.640000 0
+10.660000 0
+10.680000 0
+10.700000 0
+10.720000 0
+10.740000 0
+10.760000 0
+10.780000 0
+10.800000 0
+10.820000 0
+10.840000 0
+10.860000 0
+10.880000 0
+10.900000 0
+10.920000 0
+10.940000 0
+10.960000 0
+10.980000 0
+11.000000 0
+11.020000 0
+11.040000 0
+11.060000 0
+11.080000 0
+11.100000 0
+11.120000 0
+11.140000 0
+11.160000 0
+11.180000 0
+11.200000 0
+11.220000 0
+11.240000 0
+11.260000 0
+11.280000 0
+11.300000 0
+11.320000 0
+11.340000 0
+11.360000 0
+11.380000 0
+11.400000 0
+11.420000 0
+11.440000 0
+11.460000 0
+11.480000 0
+11.500000 0
+11.520000 0
+11.540000 0
+11.560000 0
+11.580000 0
+11.600000 0
+11.620000 0
+11.640000 0
+11.660000 0
+11.680000 0
+11.700000 0
+11.720000 0
+11.740000 0
+11.760000 0
+11.780000 0
+11.800000 0
+11.820000 0
+11.840000 0
+11.860000 0
+11.880000 0
+11.900000 0
+11.920000 0
+11.940000 0
+11.960000 0
+11.980000 0
+12.000000 0
+12.020000 0
+12.040000 0
+12.060000 0
+12.080000 0
+12.100000 0
+12.120000 0
+12.140000 0
+12.160000 0
+12.180000 0
+12.200000 0
+12.220000 0
+12.240000 0
+12.260000 0
+12.280000 0
+12.300000 0
+12.320000 0
+12.340000 0
+12.360000 0
+12.380000 0
+12.400000 0
+12.420000 0
+12.440000 0
+12.460000 0
+12.480000 0
+12.500000 0
+12.520000 0
+12.540000 0
+12.560000 0
+12.580000 0
+12.600000 0
+12.620000 0
+12.640000 0
+12.660000 0
+12.680000 0
+12.700000 0
+12.720000 0
+12.740000 0
+12.760000 0
+12.780000 0
+12.800000 0
+12.820000 0
+12.840000 0
+12.860000 0
+12.880000 0
+12.900000 0
+12.920000 0
+12.940000 0
+12.960000 0
+12.980000 0
+13.000000 0
+13.020000 0
+13.040000 0
+13.060000 0
+13.080000 0
+13.100000 0
+13.120000 0
+13.140000 0
+13.160000 0
+13.180000 0
+13.200000 0
+13.220000 0
+13.240000 0
+13.260000 0
+13.280000 0
+13.300000 0
+13.320000 0
+13.340000 0
+13.360000 0
+13.380000 0
+13.400000 0
+13.420000 0
+13.440000 0
+13.460000 0
+13.480000 0
+13.500000 0
+13.520000 0
+13.540000 0
+13.560000 0
+13.580000 0
+13.600000 0
+13.620000 0
+13.640000 0
+13.660000 0
+13.680000 0
+13.700000 0
+13.720000 0
+13.740000 0
+13.760000 0
+13.780000 0
+13.800000 0
+13.820000 0
+13.840000 0
+13.860000 0
+13.880000 0
+13.900000 0
+13.920000 0
+13.940000 0
+13.960000 0
+13.980000 0
+14.000000 0
+14.020000 0
+14.040000 0
+14.060000 0
+14.080000 0
+14.100000 0
+14.120000 0
+14.140000 0
+14.160000 0
+14.180000 0
+14.200000 0
+14.220000 0
+14.240000 0
+14.260000 0
+14.280000 0
+14.300000 0
+14.320000 0
+14.340000 0
+14.360000 0
+14.380000 0
+14.400000 0
+14.420000 0
+14.440000 0
+14.460000 0
+14.480000 0
+14.500000 0
+14.520000 0
+14.540000 0
+14.560000 0
+14.580000 0
+14.600000 0
+14.620000 0
+14.640000 0
+14.660000 0
+14.680000 0
+14.700000 0
+14.720000 0
+14.740000 0
+14.760000 0
+14.780000 0
+14.800000 0
+14.820000 0
+14.840000 0
+14.860000 0
+14.880000 0
+14.900000 0
+14.920000 0
+14.940000 0
+14.960000 0
+14.980000 0
+15.000000 0
+15.020000 0
+15.040000 0
+15.060000 0
+15.080000 0
+15.100000 0
+15.120000 0
+15.140000 0
+15.160000 0
+15.180000 0
+15.200000 0
+15.220000 0
+15.240000 0
+15.260000 0
+15.280000 0
+15.300000 0
+15.320000 0
+15.340000 0
+15.360000 0
+15.380000 0
+15.400000 0
+15.420000 0
+15.440000 0
+15.460000 0
+15.480000 0
+15.500000 0
+15.520000 0
+15.540000 0
+15.560000 0
+15.580000 0
+15.600000 0
+15.620000 0
+15.640000 0
+15.660000 0
+15.680000 0
+15.700000 0
+15.720000 0
+15.740000 0
+15.760000 0
+15.780000 0
+15.800000 0
+15.820000 0
+15.840000 0
+15.860000 0
+15.880000 0
+15.900000 0
+15.920000 0
+15.940000 0
+15.960000 0
+15.980000 0
+16.000000 0
+16.020000 0
+16.040000 0
+16.060000 0
+16.080000 0
+16.100000 0
+16.120000 0
+16.140000 0
+16.160000 0
+16.180000 0
+16.200000 0
+16.220000 0
+16.240000 0
+16.260000 0
+16.280000 0
+16.300000 0
+16.320000 0
+16.340000 0
+16.360000 0
+16.380000 0
+16.400000 0
+16.420000 0
+16.440000 0
+16.460000 0
+16.480000 0
+16.500000 0
+16.520000 0
+16.540000 0
+16.560000 0
+16.580000 0
+16.600000 0
+16.620000 0
+16.640000 0
+16.660000 0
+16.680000 0
+16.700000 0
+16.720000 0
+16.740000 0
+16.760000 0
+16.780000 0
+16.800000 0
+16.820000 0
+16.840000 0
+16.860000 0
+16.880000 0
+16.900000 0
+16.920000 0
+16.940000 0
+16.960000 0
+16.980000 0
+17.000000 0
+17.020000 0
+17.040000 0
+17.060000 0
+17.080000 0
+17.100000 0
+17.120000 0
+17.140000 0
+17.160000 0
+17.180000 0
+17.200000 0
+17.220000 0
+17.240000 0
+17.260000 0
+17.280000 0
+17.300000 0
+17.320000 0
+17.340000 0
+17.360000 0
+17.380000 0
+17.400000 0
+17.420000 0
+17.440000 0
+17.460000 0
+17.480000 0
+17.500000 0
+17.520000 0
+17.540000 0
+17.560000 0
+17.580000 0
+17.600000 0
+17.620000 0
+17.640000 0
+17.660000 0
+17.680000 0
+17.700000 0
+17.720000 0
+17.740000 0
+17.760000 0
+17.780000 0
+17.800000 0
+17.820000 0
+17.840000 0
+17.860000 0
+17.880000 0
+17.900000 0
+17.920000 0
+17.940000 0
+17.960000 0
+17.980000 0
+18.000000 0
+18.020000 0
+18.040000 0
+18.060000 0
+18.080000 0
+18.100000 0
+18.120000 0
+18.140000 0
+18.160000 0
+18.180000 0
+18.200000 0
+18.220000 0
+18.240000 0
+18.260000 0
+18.280000 0
+18.300000 0
+18.320000 0
+18.340000 0
+18.360000 0
+18.380000 0
+18.400000 0
+18.420000 0
+18.440000 0
+18.460000 0
+18.480000 0
+18.500000 0
+18.520000 0
+18.540000 0
+18.560000 0
+18.580000 0
+18.600000 0
+18.620000 0
+18.640000 0
+18.660000 0
+18.680000 0
+18.700000 0
+18.720000 0
+18.740000 0
+18.760000 0
+18.780000 0
+18.800000 0
+18.820000 0
+18.840000 0
+18.860000 0
+18.880000 0
+18.900000 0
+18.920000 0
+18.940000 0
+18.960000 0
+18.980000 0
+19.000000 0
+19.020000 0
+19.040000 0
+19.060000 0
+19.080000 0
+19.100000 0
+19.120000 0
+19.140000 0
+19.160000 0
+19.180000 0
+19.200000 0
+19.220000 0
+19.240000 0
+19.260000 0
+19.280000 0
+19.300000 0
+19.320000 0
+19.340000 0
+19.360000 0
+19.380000 0
+19.400000 0
+19.420000 0
+19.440000 0
+19.460000 0
+19.480000 0
+19.500000 0
+19.520000 0
+19.540000 0
+19.560000 0
+19.580000 0
+19.600000 0
+19.620000 0
+19.640000 0
+19.660000 0
+19.680000 0
+19.700000 0
+19.720000 0
+19.740000 0
+19.760000 0
+19.780000 0
+19.800000 0
+19.820000 0
+19.840000 0
+19.860000 0
+19.880000 0
+19.900000 0
+19.920000 0
+19.940000 0
+19.960000 0
+19.980000 0
+20.000000 0
+20.020000 0
+20.040000 0
+20.060000 0
+20.080000 0
+20.100000 0
+20.120000 0
+20.140000 0
+20.160000 0
+20.180000 0
+20.200000 0
+20.220000 0
+20.240000 0
+20.260000 0
+20.280000 0
+20.300000 0
+20.320000 0
+20.340000 0
+20.360000 0
+20.380000 0
+20.400000 0
+20.420000 0
+20.440000 0
+20.460000 0
+20.480000 0
+20.500000 0
+20.520000 0
+20.540000 0
+20.560000 0
+20.580000 0
+20.600000 0
+20.620000 0
+20.640000 0
+20.660000 0
+20.680000 0
+20.700000 0
+20.720000 0
+20.740000 0
+20.760000 0
+20.780000 0
+20.800000 0
+20.820000 0
+20.840000 0
+20.860000 0
+20.880000 0
+20.900000 0
+20.920000 0
+20.940000 0
+20.960000 0
+20.980000 0
+21.000000 0
+21.020000 0
+21.040000 0
+21.060000 0
+21.080000 0
+21.100000 0
+21.120000 0
+21.140000 0
+21.160000 0
+21.180000 0
+21.200000 0
+21.220000 0
+21.240000 0
+21.260000 0
+21.280000 0
+21.300000 0
+21.320000 0
+21.340000 0
+21.360000 0
+21.380000 0
+21.400000 0
+21.420000 0
+21.440000 0
+21.460000 0
+21.480000 0
+21.500000 0
+21.520000 0
+21.540000 0
+21.560000 0
+21.580000 0
+21.600000 0
+21.620000 0
+21.640000 0
+21.660000 0
+21.680000 0
+21.700000 0
+21.720000 0
+21.740000 0
+21.760000 0
+21.780000 0
+21.800000 0
+21.820000 0
+21.840000 0
+21.860000 0
+21.880000 0
+21.900000 0
+21.920000 0
+21.940000 0
+21.960000 0
+21.980000 0
+22.000000 0
+22.020000 0
+22.040000 0
+22.060000 0
+22.080000 0
+22.100000 0
+22.120000 0
+22.140000 0
+22.160000 0
+22.180000 0
+22.200000 0
+22.220000 0
+22.240000 0
+22.260000 0
+22.280000 0
+22.300000 0
+22.320000 0
+22.340000 0
+22.360000 0
+22.380000 0
+22.400000 0
+22.420000 0
+22.440000 0
+22.460000 0
+22.480000 0
+22.500000 0
+22.520000 0
+22.540000 0
+22.560000 0
+22.580000 0
+22.600000 0
+22.620000 0
+22.640000 0
+22.660000 0
+22.680000 0
+22.700000 0
+22.720000 0
+22.740000 0
+22.760000 0
+22.780000 0
+22.800000 0
+22.820000 0
+22.840000 0
+22.860000 0
+22.880000 0
+22.900000 0
+22.920000 0
+22.940000 0
+22.960000 0
+22.980000 0
+23.000000 0
+23.020000 0
+23.040000 0
+23.060000 0
+23.080000 0
+23.100000 0
+23.120000 0
+23.140000 0
+23.160000 0
+23.180000 0
+23.200000 0
+23.220000 0
+23.240000 0
+23.260000 0
+23.280000 0
+23.300000 0
+23.320000 0
+23.340000 0
+23.360000 0
+23.380000 0
+23.400000 0
+23.420000 0
+23.440000 0
+23.460000 0
+23.480000 0
+23.500000 0
+23.520000 0
+23.540000 0
+23.560000 0
+23.580000 0
+23.600000 0
+23.620000 0
+23.640000 0
+23.660000 0
+23.680000 0
+23.700000 0
+23.720000 0
+23.740000 0
+23.760000 0
+23.780000 0
+23.800000 0
+23.820000 0
+23.840000 0
+23.860000 0
+23.880000 0
+23.900000 0
+23.920000 0
+23.940000 0
+23.960000 0
+23.980000 0
+24.000000 0
+24.020000 0
+24.040000 0
+24.060000 0
+24.080000 0
+24.100000 0
+24.120000 0
+24.140000 0
+24.160000 0
+24.180000 0
+24.200000 0
+24.220000 0
+24.240000 0
+24.260000 0
+24.280000 0
+24.300000 0
+24.320000 0
+24.340000 0
+24.360000 0
+24.380000 0
+24.400000 0
+24.420000 0
+24.440000 0
+24.460000 0
+24.480000 0
+24.500000 0
+24.520000 0
+24.540000 0
+24.560000 0
+24.580000 0
+24.600000 0
+24.620000 0
+24.640000 0
+24.660000 0
+24.680000 0
+24.700000 0
+24.720000 0
+24.740000 0
+24.760000 0
+24.780000 0
+24.800000 0
+24.820000 0
+24.840000 0
+24.860000 0
+24.880000 0
+24.900000 0
+24.920000 0
+24.940000 0
+24.960000 0
+24.980000 0
+25.000000 0
+25.020000 0
+25.040000 0
+25.060000 0
+25.080000 0
+25.100000 0
+25.120000 0
+25.140000 0
+25.160000 0
+25.180000 0
+25.200000 0
+25.220000 0
+25.240000 0
+25.260000 0
+25.280000 0
+25.300000 0
+25.320000 0
+25.340000 0
+25.360000 0
+25.380000 0
+25.400000 0
+25.420000 0
+25.440000 0
+25.460000 0
+25.480000 0
+25.500000 0
+25.520000 0
+25.540000 0
+25.560000 0
+25.580000 0
+25.600000 0
+25.620000 0
+25.640000 0
+25.660000 0
+25.680000 0
+25.700000 0
+25.720000 0
+25.740000 0
+25.760000 0
+25.780000 0
+25.800000 0
+25.820000 0
+25.840000 0
+25.860000 0
+25.880000 0
+25.900000 0
+25.920000 0
+25.940000 0
+25.960000 0
+25.980000 0
+26.000000 0
+26.020000 0
+26.040000 0
+26.060000 0
+26.080000 0
+26.100000 0
+26.120000 0
+26.140000 0
+26.160000 0
+26.180000 0
+26.200000 0
+26.220000 0
+26.240000 0
+26.260000 0
+26.280000 0
+26.300000 0
+26.320000 0
+26.340000 0
+26.360000 0
+26.380000 0
+26.400000 0
+26.420000 0
+26.440000 0
+26.460000 0
+26.480000 0
+26.500000 0
+26.520000 0
+26.540000 0
+26.560000 0
+26.580000 0
+26.600000 0
+26.620000 0
+26.640000 0
+26.660000 0
+26.680000 0
+26.700000 0
+26.720000 0
+26.740000 0
+26.760000 0
+26.780000 0
+26.800000 0
+26.820000 0
+26.840000 0
+26.860000 0
+26.880000 0
+26.900000 0
+26.920000 0
+26.940000 0
+26.960000 0
+26.980000 0
+27.000000 0
+27.020000 0
+27.040000 0
+27.060000 0
+27.080000 0
+27.100000 0
+27.120000 0
+27.140000 0
+27.160000 0
+27.180000 0
+27.200000 0
+27.220000 0
+27.240000 0
+27.260000 0
+27.280000 0
+27.300000 0
+27.320000 0
+27.340000 0
+27.360000 0
+27.380000 0
+27.400000 0
+27.420000 0
+27.440000 0
+27.460000 0
+27.480000 0
+27.500000 0
+27.520000 0
+27.540000 0
+27.560000 0
+27.580000 0
+27.600000 0
+27.620000 0
+27.640000 0
+27.660000 0
+27.680000 0
+27.700000 0
+27.720000 0
+27.740000 0
+27.760000 0
+27.780000 0
+27.800000 0
+27.820000 0
+27.840000 0
+27.860000 0
+27.880000 0
+27.900000 0
+27.920000 0
+27.940000 0
+27.960000 0
+27.980000 0
+28.000000 0
+28.020000 0
+28.040000 0
+28.060000 0
+28.080000 0
+28.100000 0
+28.120000 0
+28.140000 0
+28.160000 0
+28.180000 0
+28.200000 0
+28.220000 0
+28.240000 0
+28.260000 0
+28.280000 0
+28.300000 0
+28.320000 0
+28.340000 0
+28.360000 0
+28.380000 0
+28.400000 0
+28.420000 0
+28.440000 0
+28.460000 0
+28.480000 0
+28.500000 0
+28.520000 0
+28.540000 0
+28.560000 0
+28.580000 0
+28.600000 0
+28.620000 0
+28.640000 0
+28.660000 0
+28.680000 0
+28.700000 0
+28.720000 0
+28.740000 0
+28.760000 0
+28.780000 0
+28.800000 0
+28.820000 0
+28.840000 0
+28.860000 0
+28.880000 0
+28.900000 0
+28.920000 0
+28.940000 0
+28.960000 0
+28.980000 0
+29.000000 0
+29.020000 0
+29.040000 0
+29.060000 0
+29.080000 0
+29.100000 0
+29.120000 0
+29.140000 0
+29.160000 0
+29.180000 0
+29.200000 0
+29.220000 0
+29.240000 0
+29.260000 0
+29.280000 0
+29.300000 0
+29.320000 0
+29.340000 0
+29.360000 0
+29.380000 0
+29.400000 0
+29.420000 0
+29.440000 0
+29.460000 0
+29.480000 0
+29.500000 0
+29.520000 0
+29.540000 0
+29.560000 0
+29.580000 0
+29.600000 0
+29.620000 0
+29.640000 0
+29.660000 0
+29.680000 0
+29.700000 0
+29.720000 0
+29.740000 0
+29.760000 0
+29.780000 0
+29.800000 0
+29.820000 0
+29.840000 0
+29.860000 0
+29.880000 0
+29.900000 0
+29.920000 0
+29.940000 0
+29.960000 0
+29.980000 0
+30.000000 0
+30.020000 0
+30.040000 0
+30.060000 0
+30.080000 0
+30.100000 0
+30.120000 0
+30.140000 0
+30.160000 0
+30.180000 0
+30.200000 0
+30.220000 0
+30.240000 0
+30.260000 0
+30.280000 0
+30.300000 0
+30.320000 0
+30.340000 0
+30.360000 0
+30.380000 0
+30.400000 0
+30.420000 0
+30.440000 0
+30.460000 0
+30.480000 0
+30.500000 0
+30.520000 0
+30.540000 0
+30.560000 0
+30.580000 0
+30.600000 0
+30.620000 0
+30.640000 0
+30.660000 0
+30.680000 0
+30.700000 0
+30.720000 0
+30.740000 0
+30.760000 0
+30.780000 0
+30.800000 0
+30.820000 0
+30.840000 0
+30.860000 0
+30.880000 0
+30.900000 0
+30.920000 0
+30.940000 0
+30.960000 0
+30.980000 0
+31.000000 0
+31.020000 0
+31.040000 0
+31.060000 0
+31.080000 0
+31.100000 0
+31.120000 0
+31.140000 0
+31.160000 0
+31.180000 0
+31.200000 0
+31.220000 0
+31.240000 0
+31.260000 0
+31.280000 0
+31.300000 0
+31.320000 0
+31.340000 0
+31.360000 0
+31.380000 0
+31.400000 0
+31.420000 0
+31.440000 0
+31.460000 0
+31.480000 0
+31.500000 0
+31.520000 0
+31.540000 0
+31.560000 0
+31.580000 0
+31.600000 0
+31.620000 0
+31.640000 0
+31.660000 0
+31.680000 0
+31.700000 0
+31.720000 0
+31.740000 0
+31.760000 0
+31.780000 0
+31.800000 0
+31.820000 0
+31.840000 0
+31.860000 0
+31.880000 0
+31.900000 0
+31.920000 0
+31.940000 0
+31.960000 0
+31.980000 0
+32.000000 0
+32.020000 0
+32.040000 0
+32.060000 0
+32.080000 0
+32.100000 0
+32.120000 0
+32.140000 0
+32.160000 0
+32.180000 0
+32.200000 0
+32.220000 0
+32.240000 0
+32.260000 0
+32.280000 0
+32.300000 0
+32.320000 0
+32.340000 0
+32.360000 0
+32.380000 0
+32.400000 0
+32.420000 0
+32.440000 0
+32.460000 0
+32.480000 0
+32.500000 0
+32.520000 0
+32.540000 0
+32.560000 0
+32.580000 0
+32.600000 0
+32.620000 0
+32.640000 0
+32.660000 0
+32.680000 0
+32.700000 0
+32.720000 0
+32.740000 0
+32.760000 0
+32.780000 0
+32.800000 0
+32.820000 0
+32.840000 0
+32.860000 0
+32.880000 0
+32.900000 0
+32.920000 0
+32.940000 0
+32.960000 0
+32.980000 0
+33.000000 0
+33.020000 0
+33.040000 0
+33.060000 0
+33.080000 0
+33.100000 0
+33.120000 0
+33.140000 0
+33.160000 0
+33.180000 0
+33.200000 0
+33.220000 0
+33.240000 0
+33.260000 0
+33.280000 0
+33.300000 0
+33.320000 0
+33.340000 0
+33.360000 0
+33.380000 0
+33.400000 0
+33.420000 0
+33.440000 0
+33.460000 0
+33.480000 0
+33.500000 0
+33.520000 0
+33.540000 0
+33.560000 0
+33.580000 0
+33.600000 0
+33.620000 0
+33.640000 0
+33.660000 0
+33.680000 0
+33.700000 0
+33.720000 0
+33.740000 0
+33.760000 0
+33.780000 0
+33.800000 0
+33.820000 0
+33.840000 0
+33.860000 0
+33.880000 0
+33.900000 0
+33.920000 0
+33.940000 0
+33.960000 0
+33.980000 0
+34.000000 0
+34.020000 0
+34.040000 0
+34.060000 0
+34.080000 0
+34.100000 0
+34.120000 0
+34.140000 0
+34.160000 0
+34.180000 0
+34.200000 0
+34.220000 0
+34.240000 0
+34.260000 0
+34.280000 0
+34.300000 0
+34.320000 0
+34.340000 0
+34.360000 0
+34.380000 0
+34.400000 0
+34.420000 0
+34.440000 0
+34.460000 0
+34.480000 0
+34.500000 0
+34.520000 0
+34.540000 0
+34.560000 0
+34.580000 0
+34.600000 0
+34.620000 0
+34.640000 0
+34.660000 0
+34.680000 0
+34.700000 0
+34.720000 0
+34.740000 0
+34.760000 0
+34.780000 0
+34.800000 0
+34.820000 0
+34.840000 0
+34.860000 0
+34.880000 0
+34.900000 0
+34.920000 0
+34.940000 0
+34.960000 0
+34.980000 0
+35.000000 0
+35.020000 0
+35.040000 0
+35.060000 0
+35.080000 0
+35.100000 0
+35.120000 0
+35.140000 0
+35.160000 0
+35.180000 0
+35.200000 0
+35.220000 0
+35.240000 0
+35.260000 0
+35.280000 0
+35.300000 0
+35.320000 0
+35.340000 0
+35.360000 0
+35.380000 0
+35.400000 0
+35.420000 0
+35.440000 0
+35.460000 0
+35.480000 0
+35.500000 0
+35.520000 0
+35.540000 0
+35.560000 0
+35.580000 0
+35.600000 0
+35.620000 0
+35.640000 0
+35.660000 0
+35.680000 0
+35.700000 0
+35.720000 0
+35.740000 0
+35.760000 0
+35.780000 0
+35.800000 0
+35.820000 0
+35.840000 0
+35.860000 0
+35.880000 0
+35.900000 0
+35.920000 0
+35.940000 0
+35.960000 0
+35.980000 0
+36.000000 0
+36.020000 0
+36.040000 0
+36.060000 0
+36.080000 0
+36.100000 0
+36.120000 0
+36.140000 0
+36.160000 0
+36.180000 0
+36.200000 0
+36.220000 0
+36.240000 0
+36.260000 0
+36.280000 0
+36.300000 0
+36.320000 0
+36.340000 0
+36.360000 0
+36.380000 0
+36.400000 0
+36.420000 0
+36.440000 0
+36.460000 0
+36.480000 0
+36.500000 0
+36.520000 0
+36.540000 0
+36.560000 0
+36.580000 0
+36.600000 0
+36.620000 0
+36.640000 0
+36.660000 0
+36.680000 0
+36.700000 0
+36.720000 0
+36.740000 0
+36.760000 0
+36.780000 0
+36.800000 0
+36.820000 0
+36.840000 0
+36.860000 0
+36.880000 0
+36.900000 0
+36.920000 0
+36.940000 0
+36.960000 0
+36.980000 0
+37.000000 0
+37.020000 0
+37.040000 0
+37.060000 0
+37.080000 0
+37.100000 0
+37.120000 0
+37.140000 0
+37.160000 0
+37.180000 0
+37.200000 0
+37.220000 0
+37.240000 0
+37.260000 0
+37.280000 0
+37.300000 0
+37.320000 0
+37.340000 0
+37.360000 0
+37.380000 0
+37.400000 0
+37.420000 0
+37.440000 0
+37.460000 0
+37.480000 0
+37.500000 0
+37.520000 0
+37.540000 0
+37.560000 0
+37.580000 0
+37.600000 0
+37.620000 0
+37.640000 0
+37.660000 0
+37.680000 0
+37.700000 0
+37.720000 0
+37.740000 0
+37.760000 0
+37.780000 0
+37.800000 0
+37.820000 0
+37.840000 0
+37.860000 0
+37.880000 0
+37.900000 0
+37.920000 0
+37.940000 0
+37.960000 0
+37.980000 0
+38.000000 0
+38.020000 0
+38.040000 0
+38.060000 0
+38.080000 0
+38.100000 0
+38.120000 0
+38.140000 0
+38.160000 0
+38.180000 0
+38.200000 0
+38.220000 0
+38.240000 0
+38.260000 0
+38.280000 0
+38.300000 0
+38.320000 0
+38.340000 0
+38.360000 0
+38.380000 0
+38.400000 0
+38.420000 0
+38.440000 0
+38.460000 0
+38.480000 0
+38.500000 0
+38.520000 0
+38.540000 0
+38.560000 0
+38.580000 0
+38.600000 0
+38.620000 0
+38.640000 0
+38.660000 0
+38.680000 0
+38.700000 0
+38.720000 0
+38.740000 0
+38.760000 0
+38.780000 0
+38.800000 0
+38.820000 0
+38.840000 0
+38.860000 0
+38.880000 0
+38.900000 0
+38.920000 0
+38.940000 0
+38.960000 0
+38.980000 0
+39.000000 0
+39.020000 0
+39.040000 0
+39.060000 0
+39.080000 0
+39.100000 0
+39.120000 0
+39.140000 0
+39.160000 0
+39.180000 0
+39.200000 0
+39.220000 0
+39.240000 0
+39.260000 0
+39.280000 0
+39.300000 0
+39.320000 0
+39.340000 0
+39.360000 0
+39.380000 0
+39.400000 0
+39.420000 0
+39.440000 0
+39.460000 0
+39.480000 0
+39.500000 0
+39.520000 0
+39.540000 0
+39.560000 0
+39.580000 0
+39.600000 0
+39.620000 0
+39.640000 0
+39.660000 0
+39.680000 0
+39.700000 0
+39.720000 0
+39.740000 0
+39.760000 0
+39.780000 0
+39.800000 0
+39.820000 0
+39.840000 0
+39.860000 0
+39.880000 0
+39.900000 0
+39.920000 0
+39.940000 0
+39.960000 0
+39.980000 0
+40.000000 0
+40.020000 0
+40.040000 0
+40.060000 0
+40.080000 0
+40.100000 0
+40.120000 0
+40.140000 0
+40.160000 0
+40.180000 0
+40.200000 0
+40.220000 0
+40.240000 0
+40.260000 0
+40.280000 0
+40.300000 0
+40.320000 0
+40.340000 0
+40.360000 0
+40.380000 0
+40.400000 0
+40.420000 0
+40.440000 0
+40.460000 0
+40.480000 0
+40.500000 0
+40.520000 0
+40.540000 0
+40.560000 0
+40.580000 0
+40.600000 0
+40.620000 0
+40.640000 0
+40.660000 0
+40.680000 0
+40.700000 0
+40.720000 0
+40.740000 0
+40.760000 0
+40.780000 0
+40.800000 0
+40.820000 0
+40.840000 0
+40.860000 0
+40.880000 0
+40.900000 0
+40.920000 0
+40.940000 0
+40.960000 0
+40.980000 0
+41.000000 0
+41.020000 0
+41.040000 0
+41.060000 0
+41.080000 0
+41.100000 0
+41.120000 0
+41.140000 0
+41.160000 0
+41.180000 0
+41.200000 0
+41.220000 0
+41.240000 0
+41.260000 0
+41.280000 0
+41.300000 0
+41.320000 0
+41.340000 0
+41.360000 0
+41.380000 0
+41.400000 0
+41.420000 0
+41.440000 0
+41.460000 0
+41.480000 0
+41.500000 0
+41.520000 0
+41.540000 0
+41.560000 0
+41.580000 0
+41.600000 0
+41.620000 0
+41.640000 0
+41.660000 0
+41.680000 0
+41.700000 0
+41.720000 0
+41.740000 0
+41.760000 0
+41.780000 0
+41.800000 0
+41.820000 0
+41.840000 0
+41.860000 0
+41.880000 0
+41.900000 0
+41.920000 0
+41.940000 0
+41.960000 0
+41.980000 0
+42.000000 0
+42.020000 0
+42.040000 0
+42.060000 0
+42.080000 0
+42.100000 0
+42.120000 0
+42.140000 0
+42.160000 0
+42.180000 0
+42.200000 0
+42.220000 0
+42.240000 0
+42.260000 0
+42.280000 0
+42.300000 0
+42.320000 0
+42.340000 0
+42.360000 0
+42.380000 0
+42.400000 0
+42.420000 0
+42.440000 0
+42.460000 0
+42.480000 0
+42.500000 0
+42.520000 0
+42.540000 0
+42.560000 0
+42.580000 0
+42.600000 0
+42.620000 0
+42.640000 0
+42.660000 0
+42.680000 0
+42.700000 0
+42.720000 0
+42.740000 0
+42.760000 0
+42.780000 0
+42.800000 0
+42.820000 0
+42.840000 0
+42.860000 0
+42.880000 0
+42.900000 0
+42.920000 0
+42.940000 0
+42.960000 0
+42.980000 0
+43.000000 0
+43.020000 0
+43.040000 0
+43.060000 0
+43.080000 0
+43.100000 0
+43.120000 0
+43.140000 0
+43.160000 0
+43.180000 0
+43.200000 0
+43.220000 0
+43.240000 0
+43.260000 0
+43.280000 0
+43.300000 0
+43.320000 0
+43.340000 0
+43.360000 0
+43.380000 0
+43.400000 0
+43.420000 0
+43.440000 0
+43.460000 0
+43.480000 0
+43.500000 0
+43.520000 0
+43.540000 0
+43.560000 0
+43.580000 0
+43.600000 0
+43.620000 0
+43.640000 0
+43.660000 0
+43.680000 0
+43.700000 0
+43.720000 0
+43.740000 0
+43.760000 0
+43.780000 0
+43.800000 0
+43.820000 0
+43.840000 0
+43.860000 0
+43.880000 0
+43.900000 0
+43.920000 0
+43.940000 0
+43.960000 0
+43.980000 0
+44.000000 0
+44.020000 0
+44.040000 0
+44.060000 0
+44.080000 0
+44.100000 0
+44.120000 0
+44.140000 0
+44.160000 0
+44.180000 0
+44.200000 0
+44.220000 0
+44.240000 0
+44.260000 0
+44.280000 0
+44.300000 0
+44.320000 0
+44.340000 0
+44.360000 0
+44.380000 0
+44.400000 0
+44.420000 0
+44.440000 0
+44.460000 0
+44.480000 0
+44.500000 0
+44.520000 0
+44.540000 0
+44.560000 0
+44.580000 0
+44.600000 0
+44.620000 0
+44.640000 0
+44.660000 0
+44.680000 0
+44.700000 0
+44.720000 0
+44.740000 0
+44.760000 0
+44.780000 0
+44.800000 0
+44.820000 0
+44.840000 0
+44.860000 0
+44.880000 0
+44.900000 0
+44.920000 0
+44.940000 0
+44.960000 0
+44.980000 0
+45.000000 0
+45.020000 0
+45.040000 0
+45.060000 0
+45.080000 0
+45.100000 0
+45.120000 0
+45.140000 0
+45.160000 0
+45.180000 0
+45.200000 0
+45.220000 0
+45.240000 0
+45.260000 0
+45.280000 0
+45.300000 0
+45.320000 0
+45.340000 0
+45.360000 0
+45.380000 0
+45.400000 0
+45.420000 0
+45.440000 0
+45.460000 0
+45.480000 0
+45.500000 0
+45.520000 0
+45.540000 0
+45.560000 0
+45.580000 0
+45.600000 0
+45.620000 0
+45.640000 0
+45.660000 0
+45.680000 0
+45.700000 0
+45.720000 0
+45.740000 0
+45.760000 0
+45.780000 0
+45.800000 0
+45.820000 0
+45.840000 0
+45.860000 0
+45.880000 0
+45.900000 0
+45.920000 0
+45.940000 0
+45.960000 0
+45.980000 0
+46.000000 0
+46.020000 0
+46.040000 0
+46.060000 0
+46.080000 0
+46.100000 0
+46.120000 0
+46.140000 0
+46.160000 0
+46.180000 0
+46.200000 0
+46.220000 0
+46.240000 0
+46.260000 0
+46.280000 0
+46.300000 0
+46.320000 0
+46.340000 0
+46.360000 0
+46.380000 0
+46.400000 0
+46.420000 0
+46.440000 0
+46.460000 0
+46.480000 0
+46.500000 0
+46.520000 0
+46.540000 0
+46.560000 0
+46.580000 0
+46.600000 0
+46.620000 0
+46.640000 0
+46.660000 0
+46.680000 0
+46.700000 0
+46.720000 0
+46.740000 0
+46.760000 0
+46.780000 0
+46.800000 0
+46.820000 0
+46.840000 0
+46.860000 0
+46.880000 0
+46.900000 0
+46.920000 0
+46.940000 0
+46.960000 0
+46.980000 0
+47.000000 0
+47.020000 0
+47.040000 0
+47.060000 0
+47.080000 0
+47.100000 0
+47.120000 0
+47.140000 0
+47.160000 0
+47.180000 0
+47.200000 0
+47.220000 0
+47.240000 0
+47.260000 0
+47.280000 0
+47.300000 0
+47.320000 0
+47.340000 0
+47.360000 0
+47.380000 0
+47.400000 0
+47.420000 0
+47.440000 0
+47.460000 0
+47.480000 0
+47.500000 0
+47.520000 0
+47.540000 0
+47.560000 0
+47.580000 0
+47.600000 0
+47.620000 0
+47.640000 0
+47.660000 0
+47.680000 0
+47.700000 0
+47.720000 0
+47.740000 0
+47.760000 0
+47.780000 0
+47.800000 0
+47.820000 0
+47.840000 0
+47.860000 0
+47.880000 0
+47.900000 0
+47.920000 0
+47.940000 0
+47.960000 0
+47.980000 0
+48.000000 0
+48.020000 0
+48.040000 0
+48.060000 0
+48.080000 0
+48.100000 0
+48.120000 0
+48.140000 0
+48.160000 0
+48.180000 0
+48.200000 0
+48.220000 0
+48.240000 0
+48.260000 0
+48.280000 0
+48.300000 0
+48.320000 0
+48.340000 0
+48.360000 0
+48.380000 0
+48.400000 0
+48.420000 0
+48.440000 0
+48.460000 0
+48.480000 0
+48.500000 0
+48.520000 0
+48.540000 0
+48.560000 0
+48.580000 0
+48.600000 0
+48.620000 0
+48.640000 0
+48.660000 0
+48.680000 0
+48.700000 0
+48.720000 0
+48.740000 0
+48.760000 0
+48.780000 0
+48.800000 0
+48.820000 0
+48.840000 0
+48.860000 0
+48.880000 0
+48.900000 0
+48.920000 0
+48.940000 0
+48.960000 0
+48.980000 0
+49.000000 0
+49.020000 0
+49.040000 0
+49.060000 0
+49.080000 0
+49.100000 0
+49.120000 0
+49.140000 0
+49.160000 0
+49.180000 0
+49.200000 0
+49.220000 0
+49.240000 0
+49.260000 0
+49.280000 0
+49.300000 0
+49.320000 0
+49.340000 0
+49.360000 0
+49.380000 0
+49.400000 0
+49.420000 0
+49.440000 0
+49.460000 0
+49.480000 0
+49.500000 0
+49.520000 0
+49.540000 0
+49.560000 0
+49.580000 0
+49.600000 0
+49.620000 0
+49.640000 0
+49.660000 0
+49.680000 0
+49.700000 0
+49.720000 0
+49.740000 0
+49.760000 0
+49.780000 0
+49.800000 0
+49.820000 0
+49.840000 0
+49.860000 0
+49.880000 0
+49.900000 0
+49.920000 0
+49.940000 0
+49.960000 0
+49.980000 0
diff --git a/mrdna/arbdmodel/resources/two_bead_model/zeroBPP.dat b/mrdna/arbdmodel/resources/two_bead_model/zeroBPP.dat
new file mode 100644
index 0000000000000000000000000000000000000000..f86c33577de28cafde51c0e67b8a146578a409c3
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/zeroBPP.dat
@@ -0,0 +1,2500 @@
+0.000000 0
+0.020000 0
+0.040000 0
+0.060000 0
+0.080000 0
+0.100000 0
+0.120000 0
+0.140000 0
+0.160000 0
+0.180000 0
+0.200000 0
+0.220000 0
+0.240000 0
+0.260000 0
+0.280000 0
+0.300000 0
+0.320000 0
+0.340000 0
+0.360000 0
+0.380000 0
+0.400000 0
+0.420000 0
+0.440000 0
+0.460000 0
+0.480000 0
+0.500000 0
+0.520000 0
+0.540000 0
+0.560000 0
+0.580000 0
+0.600000 0
+0.620000 0
+0.640000 0
+0.660000 0
+0.680000 0
+0.700000 0
+0.720000 0
+0.740000 0
+0.760000 0
+0.780000 0
+0.800000 0
+0.820000 0
+0.840000 0
+0.860000 0
+0.880000 0
+0.900000 0
+0.920000 0
+0.940000 0
+0.960000 0
+0.980000 0
+1.000000 0
+1.020000 0
+1.040000 0
+1.060000 0
+1.080000 0
+1.100000 0
+1.120000 0
+1.140000 0
+1.160000 0
+1.180000 0
+1.200000 0
+1.220000 0
+1.240000 0
+1.260000 0
+1.280000 0
+1.300000 0
+1.320000 0
+1.340000 0
+1.360000 0
+1.380000 0
+1.400000 0
+1.420000 0
+1.440000 0
+1.460000 0
+1.480000 0
+1.500000 0
+1.520000 0
+1.540000 0
+1.560000 0
+1.580000 0
+1.600000 0
+1.620000 0
+1.640000 0
+1.660000 0
+1.680000 0
+1.700000 0
+1.720000 0
+1.740000 0
+1.760000 0
+1.780000 0
+1.800000 0
+1.820000 0
+1.840000 0
+1.860000 0
+1.880000 0
+1.900000 0
+1.920000 0
+1.940000 0
+1.960000 0
+1.980000 0
+2.000000 0
+2.020000 0
+2.040000 0
+2.060000 0
+2.080000 0
+2.100000 0
+2.120000 0
+2.140000 0
+2.160000 0
+2.180000 0
+2.200000 0
+2.220000 0
+2.240000 0
+2.260000 0
+2.280000 0
+2.300000 0
+2.320000 0
+2.340000 0
+2.360000 0
+2.380000 0
+2.400000 0
+2.420000 0
+2.440000 0
+2.460000 0
+2.480000 0
+2.500000 0
+2.520000 0
+2.540000 0
+2.560000 0
+2.580000 0
+2.600000 0
+2.620000 0
+2.640000 0
+2.660000 0
+2.680000 0
+2.700000 0
+2.720000 0
+2.740000 0
+2.760000 0
+2.780000 0
+2.800000 0
+2.820000 0
+2.840000 0
+2.860000 0
+2.880000 0
+2.900000 0
+2.920000 0
+2.940000 0
+2.960000 0
+2.980000 0
+3.000000 0
+3.020000 0
+3.040000 0
+3.060000 0
+3.080000 0
+3.100000 0
+3.120000 0
+3.140000 0
+3.160000 0
+3.180000 0
+3.200000 0
+3.220000 0
+3.240000 0
+3.260000 0
+3.280000 0
+3.300000 0
+3.320000 0
+3.340000 0
+3.360000 0
+3.380000 0
+3.400000 0
+3.420000 0
+3.440000 0
+3.460000 0
+3.480000 0
+3.500000 0
+3.520000 0
+3.540000 0
+3.560000 0
+3.580000 0
+3.600000 0
+3.620000 0
+3.640000 0
+3.660000 0
+3.680000 0
+3.700000 0
+3.720000 0
+3.740000 0
+3.760000 0
+3.780000 0
+3.800000 0
+3.820000 0
+3.840000 0
+3.860000 0
+3.880000 0
+3.900000 0
+3.920000 0
+3.940000 0
+3.960000 0
+3.980000 0
+4.000000 0
+4.020000 0
+4.040000 0
+4.060000 0
+4.080000 0
+4.100000 0
+4.120000 0
+4.140000 0
+4.160000 0
+4.180000 0
+4.200000 0
+4.220000 0
+4.240000 0
+4.260000 0
+4.280000 0
+4.300000 0
+4.320000 0
+4.340000 0
+4.360000 0
+4.380000 0
+4.400000 0
+4.420000 0
+4.440000 0
+4.460000 0
+4.480000 0
+4.500000 0
+4.520000 0
+4.540000 0
+4.560000 0
+4.580000 0
+4.600000 0
+4.620000 0
+4.640000 0
+4.660000 0
+4.680000 0
+4.700000 0
+4.720000 0
+4.740000 0
+4.760000 0
+4.780000 0
+4.800000 0
+4.820000 0
+4.840000 0
+4.860000 0
+4.880000 0
+4.900000 0
+4.920000 0
+4.940000 0
+4.960000 0
+4.980000 0
+5.000000 0
+5.020000 0
+5.040000 0
+5.060000 0
+5.080000 0
+5.100000 0
+5.120000 0
+5.140000 0
+5.160000 0
+5.180000 0
+5.200000 0
+5.220000 0
+5.240000 0
+5.260000 0
+5.280000 0
+5.300000 0
+5.320000 0
+5.340000 0
+5.360000 0
+5.380000 0
+5.400000 0
+5.420000 0
+5.440000 0
+5.460000 0
+5.480000 0
+5.500000 0
+5.520000 0
+5.540000 0
+5.560000 0
+5.580000 0
+5.600000 0
+5.620000 0
+5.640000 0
+5.660000 0
+5.680000 0
+5.700000 0
+5.720000 0
+5.740000 0
+5.760000 0
+5.780000 0
+5.800000 0
+5.820000 0
+5.840000 0
+5.860000 0
+5.880000 0
+5.900000 0
+5.920000 0
+5.940000 0
+5.960000 0
+5.980000 0
+6.000000 0
+6.020000 0
+6.040000 0
+6.060000 0
+6.080000 0
+6.100000 0
+6.120000 0
+6.140000 0
+6.160000 0
+6.180000 0
+6.200000 0
+6.220000 0
+6.240000 0
+6.260000 0
+6.280000 0
+6.300000 0
+6.320000 0
+6.340000 0
+6.360000 0
+6.380000 0
+6.400000 0
+6.420000 0
+6.440000 0
+6.460000 0
+6.480000 0
+6.500000 0
+6.520000 0
+6.540000 0
+6.560000 0
+6.580000 0
+6.600000 0
+6.620000 0
+6.640000 0
+6.660000 0
+6.680000 0
+6.700000 0
+6.720000 0
+6.740000 0
+6.760000 0
+6.780000 0
+6.800000 0
+6.820000 0
+6.840000 0
+6.860000 0
+6.880000 0
+6.900000 0
+6.920000 0
+6.940000 0
+6.960000 0
+6.980000 0
+7.000000 0
+7.020000 0
+7.040000 0
+7.060000 0
+7.080000 0
+7.100000 0
+7.120000 0
+7.140000 0
+7.160000 0
+7.180000 0
+7.200000 0
+7.220000 0
+7.240000 0
+7.260000 0
+7.280000 0
+7.300000 0
+7.320000 0
+7.340000 0
+7.360000 0
+7.380000 0
+7.400000 0
+7.420000 0
+7.440000 0
+7.460000 0
+7.480000 0
+7.500000 0
+7.520000 0
+7.540000 0
+7.560000 0
+7.580000 0
+7.600000 0
+7.620000 0
+7.640000 0
+7.660000 0
+7.680000 0
+7.700000 0
+7.720000 0
+7.740000 0
+7.760000 0
+7.780000 0
+7.800000 0
+7.820000 0
+7.840000 0
+7.860000 0
+7.880000 0
+7.900000 0
+7.920000 0
+7.940000 0
+7.960000 0
+7.980000 0
+8.000000 0
+8.020000 0
+8.040000 0
+8.060000 0
+8.080000 0
+8.100000 0
+8.120000 0
+8.140000 0
+8.160000 0
+8.180000 0
+8.200000 0
+8.220000 0
+8.240000 0
+8.260000 0
+8.280000 0
+8.300000 0
+8.320000 0
+8.340000 0
+8.360000 0
+8.380000 0
+8.400000 0
+8.420000 0
+8.440000 0
+8.460000 0
+8.480000 0
+8.500000 0
+8.520000 0
+8.540000 0
+8.560000 0
+8.580000 0
+8.600000 0
+8.620000 0
+8.640000 0
+8.660000 0
+8.680000 0
+8.700000 0
+8.720000 0
+8.740000 0
+8.760000 0
+8.780000 0
+8.800000 0
+8.820000 0
+8.840000 0
+8.860000 0
+8.880000 0
+8.900000 0
+8.920000 0
+8.940000 0
+8.960000 0
+8.980000 0
+9.000000 0
+9.020000 0
+9.040000 0
+9.060000 0
+9.080000 0
+9.100000 0
+9.120000 0
+9.140000 0
+9.160000 0
+9.180000 0
+9.200000 0
+9.220000 0
+9.240000 0
+9.260000 0
+9.280000 0
+9.300000 0
+9.320000 0
+9.340000 0
+9.360000 0
+9.380000 0
+9.400000 0
+9.420000 0
+9.440000 0
+9.460000 0
+9.480000 0
+9.500000 0
+9.520000 0
+9.540000 0
+9.560000 0
+9.580000 0
+9.600000 0
+9.620000 0
+9.640000 0
+9.660000 0
+9.680000 0
+9.700000 0
+9.720000 0
+9.740000 0
+9.760000 0
+9.780000 0
+9.800000 0
+9.820000 0
+9.840000 0
+9.860000 0
+9.880000 0
+9.900000 0
+9.920000 0
+9.940000 0
+9.960000 0
+9.980000 0
+10.000000 0
+10.020000 0
+10.040000 0
+10.060000 0
+10.080000 0
+10.100000 0
+10.120000 0
+10.140000 0
+10.160000 0
+10.180000 0
+10.200000 0
+10.220000 0
+10.240000 0
+10.260000 0
+10.280000 0
+10.300000 0
+10.320000 0
+10.340000 0
+10.360000 0
+10.380000 0
+10.400000 0
+10.420000 0
+10.440000 0
+10.460000 0
+10.480000 0
+10.500000 0
+10.520000 0
+10.540000 0
+10.560000 0
+10.580000 0
+10.600000 0
+10.620000 0
+10.640000 0
+10.660000 0
+10.680000 0
+10.700000 0
+10.720000 0
+10.740000 0
+10.760000 0
+10.780000 0
+10.800000 0
+10.820000 0
+10.840000 0
+10.860000 0
+10.880000 0
+10.900000 0
+10.920000 0
+10.940000 0
+10.960000 0
+10.980000 0
+11.000000 0
+11.020000 0
+11.040000 0
+11.060000 0
+11.080000 0
+11.100000 0
+11.120000 0
+11.140000 0
+11.160000 0
+11.180000 0
+11.200000 0
+11.220000 0
+11.240000 0
+11.260000 0
+11.280000 0
+11.300000 0
+11.320000 0
+11.340000 0
+11.360000 0
+11.380000 0
+11.400000 0
+11.420000 0
+11.440000 0
+11.460000 0
+11.480000 0
+11.500000 0
+11.520000 0
+11.540000 0
+11.560000 0
+11.580000 0
+11.600000 0
+11.620000 0
+11.640000 0
+11.660000 0
+11.680000 0
+11.700000 0
+11.720000 0
+11.740000 0
+11.760000 0
+11.780000 0
+11.800000 0
+11.820000 0
+11.840000 0
+11.860000 0
+11.880000 0
+11.900000 0
+11.920000 0
+11.940000 0
+11.960000 0
+11.980000 0
+12.000000 0
+12.020000 0
+12.040000 0
+12.060000 0
+12.080000 0
+12.100000 0
+12.120000 0
+12.140000 0
+12.160000 0
+12.180000 0
+12.200000 0
+12.220000 0
+12.240000 0
+12.260000 0
+12.280000 0
+12.300000 0
+12.320000 0
+12.340000 0
+12.360000 0
+12.380000 0
+12.400000 0
+12.420000 0
+12.440000 0
+12.460000 0
+12.480000 0
+12.500000 0
+12.520000 0
+12.540000 0
+12.560000 0
+12.580000 0
+12.600000 0
+12.620000 0
+12.640000 0
+12.660000 0
+12.680000 0
+12.700000 0
+12.720000 0
+12.740000 0
+12.760000 0
+12.780000 0
+12.800000 0
+12.820000 0
+12.840000 0
+12.860000 0
+12.880000 0
+12.900000 0
+12.920000 0
+12.940000 0
+12.960000 0
+12.980000 0
+13.000000 0
+13.020000 0
+13.040000 0
+13.060000 0
+13.080000 0
+13.100000 0
+13.120000 0
+13.140000 0
+13.160000 0
+13.180000 0
+13.200000 0
+13.220000 0
+13.240000 0
+13.260000 0
+13.280000 0
+13.300000 0
+13.320000 0
+13.340000 0
+13.360000 0
+13.380000 0
+13.400000 0
+13.420000 0
+13.440000 0
+13.460000 0
+13.480000 0
+13.500000 0
+13.520000 0
+13.540000 0
+13.560000 0
+13.580000 0
+13.600000 0
+13.620000 0
+13.640000 0
+13.660000 0
+13.680000 0
+13.700000 0
+13.720000 0
+13.740000 0
+13.760000 0
+13.780000 0
+13.800000 0
+13.820000 0
+13.840000 0
+13.860000 0
+13.880000 0
+13.900000 0
+13.920000 0
+13.940000 0
+13.960000 0
+13.980000 0
+14.000000 0
+14.020000 0
+14.040000 0
+14.060000 0
+14.080000 0
+14.100000 0
+14.120000 0
+14.140000 0
+14.160000 0
+14.180000 0
+14.200000 0
+14.220000 0
+14.240000 0
+14.260000 0
+14.280000 0
+14.300000 0
+14.320000 0
+14.340000 0
+14.360000 0
+14.380000 0
+14.400000 0
+14.420000 0
+14.440000 0
+14.460000 0
+14.480000 0
+14.500000 0
+14.520000 0
+14.540000 0
+14.560000 0
+14.580000 0
+14.600000 0
+14.620000 0
+14.640000 0
+14.660000 0
+14.680000 0
+14.700000 0
+14.720000 0
+14.740000 0
+14.760000 0
+14.780000 0
+14.800000 0
+14.820000 0
+14.840000 0
+14.860000 0
+14.880000 0
+14.900000 0
+14.920000 0
+14.940000 0
+14.960000 0
+14.980000 0
+15.000000 0
+15.020000 0
+15.040000 0
+15.060000 0
+15.080000 0
+15.100000 0
+15.120000 0
+15.140000 0
+15.160000 0
+15.180000 0
+15.200000 0
+15.220000 0
+15.240000 0
+15.260000 0
+15.280000 0
+15.300000 0
+15.320000 0
+15.340000 0
+15.360000 0
+15.380000 0
+15.400000 0
+15.420000 0
+15.440000 0
+15.460000 0
+15.480000 0
+15.500000 0
+15.520000 0
+15.540000 0
+15.560000 0
+15.580000 0
+15.600000 0
+15.620000 0
+15.640000 0
+15.660000 0
+15.680000 0
+15.700000 0
+15.720000 0
+15.740000 0
+15.760000 0
+15.780000 0
+15.800000 0
+15.820000 0
+15.840000 0
+15.860000 0
+15.880000 0
+15.900000 0
+15.920000 0
+15.940000 0
+15.960000 0
+15.980000 0
+16.000000 0
+16.020000 0
+16.040000 0
+16.060000 0
+16.080000 0
+16.100000 0
+16.120000 0
+16.140000 0
+16.160000 0
+16.180000 0
+16.200000 0
+16.220000 0
+16.240000 0
+16.260000 0
+16.280000 0
+16.300000 0
+16.320000 0
+16.340000 0
+16.360000 0
+16.380000 0
+16.400000 0
+16.420000 0
+16.440000 0
+16.460000 0
+16.480000 0
+16.500000 0
+16.520000 0
+16.540000 0
+16.560000 0
+16.580000 0
+16.600000 0
+16.620000 0
+16.640000 0
+16.660000 0
+16.680000 0
+16.700000 0
+16.720000 0
+16.740000 0
+16.760000 0
+16.780000 0
+16.800000 0
+16.820000 0
+16.840000 0
+16.860000 0
+16.880000 0
+16.900000 0
+16.920000 0
+16.940000 0
+16.960000 0
+16.980000 0
+17.000000 0
+17.020000 0
+17.040000 0
+17.060000 0
+17.080000 0
+17.100000 0
+17.120000 0
+17.140000 0
+17.160000 0
+17.180000 0
+17.200000 0
+17.220000 0
+17.240000 0
+17.260000 0
+17.280000 0
+17.300000 0
+17.320000 0
+17.340000 0
+17.360000 0
+17.380000 0
+17.400000 0
+17.420000 0
+17.440000 0
+17.460000 0
+17.480000 0
+17.500000 0
+17.520000 0
+17.540000 0
+17.560000 0
+17.580000 0
+17.600000 0
+17.620000 0
+17.640000 0
+17.660000 0
+17.680000 0
+17.700000 0
+17.720000 0
+17.740000 0
+17.760000 0
+17.780000 0
+17.800000 0
+17.820000 0
+17.840000 0
+17.860000 0
+17.880000 0
+17.900000 0
+17.920000 0
+17.940000 0
+17.960000 0
+17.980000 0
+18.000000 0
+18.020000 0
+18.040000 0
+18.060000 0
+18.080000 0
+18.100000 0
+18.120000 0
+18.140000 0
+18.160000 0
+18.180000 0
+18.200000 0
+18.220000 0
+18.240000 0
+18.260000 0
+18.280000 0
+18.300000 0
+18.320000 0
+18.340000 0
+18.360000 0
+18.380000 0
+18.400000 0
+18.420000 0
+18.440000 0
+18.460000 0
+18.480000 0
+18.500000 0
+18.520000 0
+18.540000 0
+18.560000 0
+18.580000 0
+18.600000 0
+18.620000 0
+18.640000 0
+18.660000 0
+18.680000 0
+18.700000 0
+18.720000 0
+18.740000 0
+18.760000 0
+18.780000 0
+18.800000 0
+18.820000 0
+18.840000 0
+18.860000 0
+18.880000 0
+18.900000 0
+18.920000 0
+18.940000 0
+18.960000 0
+18.980000 0
+19.000000 0
+19.020000 0
+19.040000 0
+19.060000 0
+19.080000 0
+19.100000 0
+19.120000 0
+19.140000 0
+19.160000 0
+19.180000 0
+19.200000 0
+19.220000 0
+19.240000 0
+19.260000 0
+19.280000 0
+19.300000 0
+19.320000 0
+19.340000 0
+19.360000 0
+19.380000 0
+19.400000 0
+19.420000 0
+19.440000 0
+19.460000 0
+19.480000 0
+19.500000 0
+19.520000 0
+19.540000 0
+19.560000 0
+19.580000 0
+19.600000 0
+19.620000 0
+19.640000 0
+19.660000 0
+19.680000 0
+19.700000 0
+19.720000 0
+19.740000 0
+19.760000 0
+19.780000 0
+19.800000 0
+19.820000 0
+19.840000 0
+19.860000 0
+19.880000 0
+19.900000 0
+19.920000 0
+19.940000 0
+19.960000 0
+19.980000 0
+20.000000 0
+20.020000 0
+20.040000 0
+20.060000 0
+20.080000 0
+20.100000 0
+20.120000 0
+20.140000 0
+20.160000 0
+20.180000 0
+20.200000 0
+20.220000 0
+20.240000 0
+20.260000 0
+20.280000 0
+20.300000 0
+20.320000 0
+20.340000 0
+20.360000 0
+20.380000 0
+20.400000 0
+20.420000 0
+20.440000 0
+20.460000 0
+20.480000 0
+20.500000 0
+20.520000 0
+20.540000 0
+20.560000 0
+20.580000 0
+20.600000 0
+20.620000 0
+20.640000 0
+20.660000 0
+20.680000 0
+20.700000 0
+20.720000 0
+20.740000 0
+20.760000 0
+20.780000 0
+20.800000 0
+20.820000 0
+20.840000 0
+20.860000 0
+20.880000 0
+20.900000 0
+20.920000 0
+20.940000 0
+20.960000 0
+20.980000 0
+21.000000 0
+21.020000 0
+21.040000 0
+21.060000 0
+21.080000 0
+21.100000 0
+21.120000 0
+21.140000 0
+21.160000 0
+21.180000 0
+21.200000 0
+21.220000 0
+21.240000 0
+21.260000 0
+21.280000 0
+21.300000 0
+21.320000 0
+21.340000 0
+21.360000 0
+21.380000 0
+21.400000 0
+21.420000 0
+21.440000 0
+21.460000 0
+21.480000 0
+21.500000 0
+21.520000 0
+21.540000 0
+21.560000 0
+21.580000 0
+21.600000 0
+21.620000 0
+21.640000 0
+21.660000 0
+21.680000 0
+21.700000 0
+21.720000 0
+21.740000 0
+21.760000 0
+21.780000 0
+21.800000 0
+21.820000 0
+21.840000 0
+21.860000 0
+21.880000 0
+21.900000 0
+21.920000 0
+21.940000 0
+21.960000 0
+21.980000 0
+22.000000 0
+22.020000 0
+22.040000 0
+22.060000 0
+22.080000 0
+22.100000 0
+22.120000 0
+22.140000 0
+22.160000 0
+22.180000 0
+22.200000 0
+22.220000 0
+22.240000 0
+22.260000 0
+22.280000 0
+22.300000 0
+22.320000 0
+22.340000 0
+22.360000 0
+22.380000 0
+22.400000 0
+22.420000 0
+22.440000 0
+22.460000 0
+22.480000 0
+22.500000 0
+22.520000 0
+22.540000 0
+22.560000 0
+22.580000 0
+22.600000 0
+22.620000 0
+22.640000 0
+22.660000 0
+22.680000 0
+22.700000 0
+22.720000 0
+22.740000 0
+22.760000 0
+22.780000 0
+22.800000 0
+22.820000 0
+22.840000 0
+22.860000 0
+22.880000 0
+22.900000 0
+22.920000 0
+22.940000 0
+22.960000 0
+22.980000 0
+23.000000 0
+23.020000 0
+23.040000 0
+23.060000 0
+23.080000 0
+23.100000 0
+23.120000 0
+23.140000 0
+23.160000 0
+23.180000 0
+23.200000 0
+23.220000 0
+23.240000 0
+23.260000 0
+23.280000 0
+23.300000 0
+23.320000 0
+23.340000 0
+23.360000 0
+23.380000 0
+23.400000 0
+23.420000 0
+23.440000 0
+23.460000 0
+23.480000 0
+23.500000 0
+23.520000 0
+23.540000 0
+23.560000 0
+23.580000 0
+23.600000 0
+23.620000 0
+23.640000 0
+23.660000 0
+23.680000 0
+23.700000 0
+23.720000 0
+23.740000 0
+23.760000 0
+23.780000 0
+23.800000 0
+23.820000 0
+23.840000 0
+23.860000 0
+23.880000 0
+23.900000 0
+23.920000 0
+23.940000 0
+23.960000 0
+23.980000 0
+24.000000 0
+24.020000 0
+24.040000 0
+24.060000 0
+24.080000 0
+24.100000 0
+24.120000 0
+24.140000 0
+24.160000 0
+24.180000 0
+24.200000 0
+24.220000 0
+24.240000 0
+24.260000 0
+24.280000 0
+24.300000 0
+24.320000 0
+24.340000 0
+24.360000 0
+24.380000 0
+24.400000 0
+24.420000 0
+24.440000 0
+24.460000 0
+24.480000 0
+24.500000 0
+24.520000 0
+24.540000 0
+24.560000 0
+24.580000 0
+24.600000 0
+24.620000 0
+24.640000 0
+24.660000 0
+24.680000 0
+24.700000 0
+24.720000 0
+24.740000 0
+24.760000 0
+24.780000 0
+24.800000 0
+24.820000 0
+24.840000 0
+24.860000 0
+24.880000 0
+24.900000 0
+24.920000 0
+24.940000 0
+24.960000 0
+24.980000 0
+25.000000 0
+25.020000 0
+25.040000 0
+25.060000 0
+25.080000 0
+25.100000 0
+25.120000 0
+25.140000 0
+25.160000 0
+25.180000 0
+25.200000 0
+25.220000 0
+25.240000 0
+25.260000 0
+25.280000 0
+25.300000 0
+25.320000 0
+25.340000 0
+25.360000 0
+25.380000 0
+25.400000 0
+25.420000 0
+25.440000 0
+25.460000 0
+25.480000 0
+25.500000 0
+25.520000 0
+25.540000 0
+25.560000 0
+25.580000 0
+25.600000 0
+25.620000 0
+25.640000 0
+25.660000 0
+25.680000 0
+25.700000 0
+25.720000 0
+25.740000 0
+25.760000 0
+25.780000 0
+25.800000 0
+25.820000 0
+25.840000 0
+25.860000 0
+25.880000 0
+25.900000 0
+25.920000 0
+25.940000 0
+25.960000 0
+25.980000 0
+26.000000 0
+26.020000 0
+26.040000 0
+26.060000 0
+26.080000 0
+26.100000 0
+26.120000 0
+26.140000 0
+26.160000 0
+26.180000 0
+26.200000 0
+26.220000 0
+26.240000 0
+26.260000 0
+26.280000 0
+26.300000 0
+26.320000 0
+26.340000 0
+26.360000 0
+26.380000 0
+26.400000 0
+26.420000 0
+26.440000 0
+26.460000 0
+26.480000 0
+26.500000 0
+26.520000 0
+26.540000 0
+26.560000 0
+26.580000 0
+26.600000 0
+26.620000 0
+26.640000 0
+26.660000 0
+26.680000 0
+26.700000 0
+26.720000 0
+26.740000 0
+26.760000 0
+26.780000 0
+26.800000 0
+26.820000 0
+26.840000 0
+26.860000 0
+26.880000 0
+26.900000 0
+26.920000 0
+26.940000 0
+26.960000 0
+26.980000 0
+27.000000 0
+27.020000 0
+27.040000 0
+27.060000 0
+27.080000 0
+27.100000 0
+27.120000 0
+27.140000 0
+27.160000 0
+27.180000 0
+27.200000 0
+27.220000 0
+27.240000 0
+27.260000 0
+27.280000 0
+27.300000 0
+27.320000 0
+27.340000 0
+27.360000 0
+27.380000 0
+27.400000 0
+27.420000 0
+27.440000 0
+27.460000 0
+27.480000 0
+27.500000 0
+27.520000 0
+27.540000 0
+27.560000 0
+27.580000 0
+27.600000 0
+27.620000 0
+27.640000 0
+27.660000 0
+27.680000 0
+27.700000 0
+27.720000 0
+27.740000 0
+27.760000 0
+27.780000 0
+27.800000 0
+27.820000 0
+27.840000 0
+27.860000 0
+27.880000 0
+27.900000 0
+27.920000 0
+27.940000 0
+27.960000 0
+27.980000 0
+28.000000 0
+28.020000 0
+28.040000 0
+28.060000 0
+28.080000 0
+28.100000 0
+28.120000 0
+28.140000 0
+28.160000 0
+28.180000 0
+28.200000 0
+28.220000 0
+28.240000 0
+28.260000 0
+28.280000 0
+28.300000 0
+28.320000 0
+28.340000 0
+28.360000 0
+28.380000 0
+28.400000 0
+28.420000 0
+28.440000 0
+28.460000 0
+28.480000 0
+28.500000 0
+28.520000 0
+28.540000 0
+28.560000 0
+28.580000 0
+28.600000 0
+28.620000 0
+28.640000 0
+28.660000 0
+28.680000 0
+28.700000 0
+28.720000 0
+28.740000 0
+28.760000 0
+28.780000 0
+28.800000 0
+28.820000 0
+28.840000 0
+28.860000 0
+28.880000 0
+28.900000 0
+28.920000 0
+28.940000 0
+28.960000 0
+28.980000 0
+29.000000 0
+29.020000 0
+29.040000 0
+29.060000 0
+29.080000 0
+29.100000 0
+29.120000 0
+29.140000 0
+29.160000 0
+29.180000 0
+29.200000 0
+29.220000 0
+29.240000 0
+29.260000 0
+29.280000 0
+29.300000 0
+29.320000 0
+29.340000 0
+29.360000 0
+29.380000 0
+29.400000 0
+29.420000 0
+29.440000 0
+29.460000 0
+29.480000 0
+29.500000 0
+29.520000 0
+29.540000 0
+29.560000 0
+29.580000 0
+29.600000 0
+29.620000 0
+29.640000 0
+29.660000 0
+29.680000 0
+29.700000 0
+29.720000 0
+29.740000 0
+29.760000 0
+29.780000 0
+29.800000 0
+29.820000 0
+29.840000 0
+29.860000 0
+29.880000 0
+29.900000 0
+29.920000 0
+29.940000 0
+29.960000 0
+29.980000 0
+30.000000 0
+30.020000 0
+30.040000 0
+30.060000 0
+30.080000 0
+30.100000 0
+30.120000 0
+30.140000 0
+30.160000 0
+30.180000 0
+30.200000 0
+30.220000 0
+30.240000 0
+30.260000 0
+30.280000 0
+30.300000 0
+30.320000 0
+30.340000 0
+30.360000 0
+30.380000 0
+30.400000 0
+30.420000 0
+30.440000 0
+30.460000 0
+30.480000 0
+30.500000 0
+30.520000 0
+30.540000 0
+30.560000 0
+30.580000 0
+30.600000 0
+30.620000 0
+30.640000 0
+30.660000 0
+30.680000 0
+30.700000 0
+30.720000 0
+30.740000 0
+30.760000 0
+30.780000 0
+30.800000 0
+30.820000 0
+30.840000 0
+30.860000 0
+30.880000 0
+30.900000 0
+30.920000 0
+30.940000 0
+30.960000 0
+30.980000 0
+31.000000 0
+31.020000 0
+31.040000 0
+31.060000 0
+31.080000 0
+31.100000 0
+31.120000 0
+31.140000 0
+31.160000 0
+31.180000 0
+31.200000 0
+31.220000 0
+31.240000 0
+31.260000 0
+31.280000 0
+31.300000 0
+31.320000 0
+31.340000 0
+31.360000 0
+31.380000 0
+31.400000 0
+31.420000 0
+31.440000 0
+31.460000 0
+31.480000 0
+31.500000 0
+31.520000 0
+31.540000 0
+31.560000 0
+31.580000 0
+31.600000 0
+31.620000 0
+31.640000 0
+31.660000 0
+31.680000 0
+31.700000 0
+31.720000 0
+31.740000 0
+31.760000 0
+31.780000 0
+31.800000 0
+31.820000 0
+31.840000 0
+31.860000 0
+31.880000 0
+31.900000 0
+31.920000 0
+31.940000 0
+31.960000 0
+31.980000 0
+32.000000 0
+32.020000 0
+32.040000 0
+32.060000 0
+32.080000 0
+32.100000 0
+32.120000 0
+32.140000 0
+32.160000 0
+32.180000 0
+32.200000 0
+32.220000 0
+32.240000 0
+32.260000 0
+32.280000 0
+32.300000 0
+32.320000 0
+32.340000 0
+32.360000 0
+32.380000 0
+32.400000 0
+32.420000 0
+32.440000 0
+32.460000 0
+32.480000 0
+32.500000 0
+32.520000 0
+32.540000 0
+32.560000 0
+32.580000 0
+32.600000 0
+32.620000 0
+32.640000 0
+32.660000 0
+32.680000 0
+32.700000 0
+32.720000 0
+32.740000 0
+32.760000 0
+32.780000 0
+32.800000 0
+32.820000 0
+32.840000 0
+32.860000 0
+32.880000 0
+32.900000 0
+32.920000 0
+32.940000 0
+32.960000 0
+32.980000 0
+33.000000 0
+33.020000 0
+33.040000 0
+33.060000 0
+33.080000 0
+33.100000 0
+33.120000 0
+33.140000 0
+33.160000 0
+33.180000 0
+33.200000 0
+33.220000 0
+33.240000 0
+33.260000 0
+33.280000 0
+33.300000 0
+33.320000 0
+33.340000 0
+33.360000 0
+33.380000 0
+33.400000 0
+33.420000 0
+33.440000 0
+33.460000 0
+33.480000 0
+33.500000 0
+33.520000 0
+33.540000 0
+33.560000 0
+33.580000 0
+33.600000 0
+33.620000 0
+33.640000 0
+33.660000 0
+33.680000 0
+33.700000 0
+33.720000 0
+33.740000 0
+33.760000 0
+33.780000 0
+33.800000 0
+33.820000 0
+33.840000 0
+33.860000 0
+33.880000 0
+33.900000 0
+33.920000 0
+33.940000 0
+33.960000 0
+33.980000 0
+34.000000 0
+34.020000 0
+34.040000 0
+34.060000 0
+34.080000 0
+34.100000 0
+34.120000 0
+34.140000 0
+34.160000 0
+34.180000 0
+34.200000 0
+34.220000 0
+34.240000 0
+34.260000 0
+34.280000 0
+34.300000 0
+34.320000 0
+34.340000 0
+34.360000 0
+34.380000 0
+34.400000 0
+34.420000 0
+34.440000 0
+34.460000 0
+34.480000 0
+34.500000 0
+34.520000 0
+34.540000 0
+34.560000 0
+34.580000 0
+34.600000 0
+34.620000 0
+34.640000 0
+34.660000 0
+34.680000 0
+34.700000 0
+34.720000 0
+34.740000 0
+34.760000 0
+34.780000 0
+34.800000 0
+34.820000 0
+34.840000 0
+34.860000 0
+34.880000 0
+34.900000 0
+34.920000 0
+34.940000 0
+34.960000 0
+34.980000 0
+35.000000 0
+35.020000 0
+35.040000 0
+35.060000 0
+35.080000 0
+35.100000 0
+35.120000 0
+35.140000 0
+35.160000 0
+35.180000 0
+35.200000 0
+35.220000 0
+35.240000 0
+35.260000 0
+35.280000 0
+35.300000 0
+35.320000 0
+35.340000 0
+35.360000 0
+35.380000 0
+35.400000 0
+35.420000 0
+35.440000 0
+35.460000 0
+35.480000 0
+35.500000 0
+35.520000 0
+35.540000 0
+35.560000 0
+35.580000 0
+35.600000 0
+35.620000 0
+35.640000 0
+35.660000 0
+35.680000 0
+35.700000 0
+35.720000 0
+35.740000 0
+35.760000 0
+35.780000 0
+35.800000 0
+35.820000 0
+35.840000 0
+35.860000 0
+35.880000 0
+35.900000 0
+35.920000 0
+35.940000 0
+35.960000 0
+35.980000 0
+36.000000 0
+36.020000 0
+36.040000 0
+36.060000 0
+36.080000 0
+36.100000 0
+36.120000 0
+36.140000 0
+36.160000 0
+36.180000 0
+36.200000 0
+36.220000 0
+36.240000 0
+36.260000 0
+36.280000 0
+36.300000 0
+36.320000 0
+36.340000 0
+36.360000 0
+36.380000 0
+36.400000 0
+36.420000 0
+36.440000 0
+36.460000 0
+36.480000 0
+36.500000 0
+36.520000 0
+36.540000 0
+36.560000 0
+36.580000 0
+36.600000 0
+36.620000 0
+36.640000 0
+36.660000 0
+36.680000 0
+36.700000 0
+36.720000 0
+36.740000 0
+36.760000 0
+36.780000 0
+36.800000 0
+36.820000 0
+36.840000 0
+36.860000 0
+36.880000 0
+36.900000 0
+36.920000 0
+36.940000 0
+36.960000 0
+36.980000 0
+37.000000 0
+37.020000 0
+37.040000 0
+37.060000 0
+37.080000 0
+37.100000 0
+37.120000 0
+37.140000 0
+37.160000 0
+37.180000 0
+37.200000 0
+37.220000 0
+37.240000 0
+37.260000 0
+37.280000 0
+37.300000 0
+37.320000 0
+37.340000 0
+37.360000 0
+37.380000 0
+37.400000 0
+37.420000 0
+37.440000 0
+37.460000 0
+37.480000 0
+37.500000 0
+37.520000 0
+37.540000 0
+37.560000 0
+37.580000 0
+37.600000 0
+37.620000 0
+37.640000 0
+37.660000 0
+37.680000 0
+37.700000 0
+37.720000 0
+37.740000 0
+37.760000 0
+37.780000 0
+37.800000 0
+37.820000 0
+37.840000 0
+37.860000 0
+37.880000 0
+37.900000 0
+37.920000 0
+37.940000 0
+37.960000 0
+37.980000 0
+38.000000 0
+38.020000 0
+38.040000 0
+38.060000 0
+38.080000 0
+38.100000 0
+38.120000 0
+38.140000 0
+38.160000 0
+38.180000 0
+38.200000 0
+38.220000 0
+38.240000 0
+38.260000 0
+38.280000 0
+38.300000 0
+38.320000 0
+38.340000 0
+38.360000 0
+38.380000 0
+38.400000 0
+38.420000 0
+38.440000 0
+38.460000 0
+38.480000 0
+38.500000 0
+38.520000 0
+38.540000 0
+38.560000 0
+38.580000 0
+38.600000 0
+38.620000 0
+38.640000 0
+38.660000 0
+38.680000 0
+38.700000 0
+38.720000 0
+38.740000 0
+38.760000 0
+38.780000 0
+38.800000 0
+38.820000 0
+38.840000 0
+38.860000 0
+38.880000 0
+38.900000 0
+38.920000 0
+38.940000 0
+38.960000 0
+38.980000 0
+39.000000 0
+39.020000 0
+39.040000 0
+39.060000 0
+39.080000 0
+39.100000 0
+39.120000 0
+39.140000 0
+39.160000 0
+39.180000 0
+39.200000 0
+39.220000 0
+39.240000 0
+39.260000 0
+39.280000 0
+39.300000 0
+39.320000 0
+39.340000 0
+39.360000 0
+39.380000 0
+39.400000 0
+39.420000 0
+39.440000 0
+39.460000 0
+39.480000 0
+39.500000 0
+39.520000 0
+39.540000 0
+39.560000 0
+39.580000 0
+39.600000 0
+39.620000 0
+39.640000 0
+39.660000 0
+39.680000 0
+39.700000 0
+39.720000 0
+39.740000 0
+39.760000 0
+39.780000 0
+39.800000 0
+39.820000 0
+39.840000 0
+39.860000 0
+39.880000 0
+39.900000 0
+39.920000 0
+39.940000 0
+39.960000 0
+39.980000 0
+40.000000 0
+40.020000 0
+40.040000 0
+40.060000 0
+40.080000 0
+40.100000 0
+40.120000 0
+40.140000 0
+40.160000 0
+40.180000 0
+40.200000 0
+40.220000 0
+40.240000 0
+40.260000 0
+40.280000 0
+40.300000 0
+40.320000 0
+40.340000 0
+40.360000 0
+40.380000 0
+40.400000 0
+40.420000 0
+40.440000 0
+40.460000 0
+40.480000 0
+40.500000 0
+40.520000 0
+40.540000 0
+40.560000 0
+40.580000 0
+40.600000 0
+40.620000 0
+40.640000 0
+40.660000 0
+40.680000 0
+40.700000 0
+40.720000 0
+40.740000 0
+40.760000 0
+40.780000 0
+40.800000 0
+40.820000 0
+40.840000 0
+40.860000 0
+40.880000 0
+40.900000 0
+40.920000 0
+40.940000 0
+40.960000 0
+40.980000 0
+41.000000 0
+41.020000 0
+41.040000 0
+41.060000 0
+41.080000 0
+41.100000 0
+41.120000 0
+41.140000 0
+41.160000 0
+41.180000 0
+41.200000 0
+41.220000 0
+41.240000 0
+41.260000 0
+41.280000 0
+41.300000 0
+41.320000 0
+41.340000 0
+41.360000 0
+41.380000 0
+41.400000 0
+41.420000 0
+41.440000 0
+41.460000 0
+41.480000 0
+41.500000 0
+41.520000 0
+41.540000 0
+41.560000 0
+41.580000 0
+41.600000 0
+41.620000 0
+41.640000 0
+41.660000 0
+41.680000 0
+41.700000 0
+41.720000 0
+41.740000 0
+41.760000 0
+41.780000 0
+41.800000 0
+41.820000 0
+41.840000 0
+41.860000 0
+41.880000 0
+41.900000 0
+41.920000 0
+41.940000 0
+41.960000 0
+41.980000 0
+42.000000 0
+42.020000 0
+42.040000 0
+42.060000 0
+42.080000 0
+42.100000 0
+42.120000 0
+42.140000 0
+42.160000 0
+42.180000 0
+42.200000 0
+42.220000 0
+42.240000 0
+42.260000 0
+42.280000 0
+42.300000 0
+42.320000 0
+42.340000 0
+42.360000 0
+42.380000 0
+42.400000 0
+42.420000 0
+42.440000 0
+42.460000 0
+42.480000 0
+42.500000 0
+42.520000 0
+42.540000 0
+42.560000 0
+42.580000 0
+42.600000 0
+42.620000 0
+42.640000 0
+42.660000 0
+42.680000 0
+42.700000 0
+42.720000 0
+42.740000 0
+42.760000 0
+42.780000 0
+42.800000 0
+42.820000 0
+42.840000 0
+42.860000 0
+42.880000 0
+42.900000 0
+42.920000 0
+42.940000 0
+42.960000 0
+42.980000 0
+43.000000 0
+43.020000 0
+43.040000 0
+43.060000 0
+43.080000 0
+43.100000 0
+43.120000 0
+43.140000 0
+43.160000 0
+43.180000 0
+43.200000 0
+43.220000 0
+43.240000 0
+43.260000 0
+43.280000 0
+43.300000 0
+43.320000 0
+43.340000 0
+43.360000 0
+43.380000 0
+43.400000 0
+43.420000 0
+43.440000 0
+43.460000 0
+43.480000 0
+43.500000 0
+43.520000 0
+43.540000 0
+43.560000 0
+43.580000 0
+43.600000 0
+43.620000 0
+43.640000 0
+43.660000 0
+43.680000 0
+43.700000 0
+43.720000 0
+43.740000 0
+43.760000 0
+43.780000 0
+43.800000 0
+43.820000 0
+43.840000 0
+43.860000 0
+43.880000 0
+43.900000 0
+43.920000 0
+43.940000 0
+43.960000 0
+43.980000 0
+44.000000 0
+44.020000 0
+44.040000 0
+44.060000 0
+44.080000 0
+44.100000 0
+44.120000 0
+44.140000 0
+44.160000 0
+44.180000 0
+44.200000 0
+44.220000 0
+44.240000 0
+44.260000 0
+44.280000 0
+44.300000 0
+44.320000 0
+44.340000 0
+44.360000 0
+44.380000 0
+44.400000 0
+44.420000 0
+44.440000 0
+44.460000 0
+44.480000 0
+44.500000 0
+44.520000 0
+44.540000 0
+44.560000 0
+44.580000 0
+44.600000 0
+44.620000 0
+44.640000 0
+44.660000 0
+44.680000 0
+44.700000 0
+44.720000 0
+44.740000 0
+44.760000 0
+44.780000 0
+44.800000 0
+44.820000 0
+44.840000 0
+44.860000 0
+44.880000 0
+44.900000 0
+44.920000 0
+44.940000 0
+44.960000 0
+44.980000 0
+45.000000 0
+45.020000 0
+45.040000 0
+45.060000 0
+45.080000 0
+45.100000 0
+45.120000 0
+45.140000 0
+45.160000 0
+45.180000 0
+45.200000 0
+45.220000 0
+45.240000 0
+45.260000 0
+45.280000 0
+45.300000 0
+45.320000 0
+45.340000 0
+45.360000 0
+45.380000 0
+45.400000 0
+45.420000 0
+45.440000 0
+45.460000 0
+45.480000 0
+45.500000 0
+45.520000 0
+45.540000 0
+45.560000 0
+45.580000 0
+45.600000 0
+45.620000 0
+45.640000 0
+45.660000 0
+45.680000 0
+45.700000 0
+45.720000 0
+45.740000 0
+45.760000 0
+45.780000 0
+45.800000 0
+45.820000 0
+45.840000 0
+45.860000 0
+45.880000 0
+45.900000 0
+45.920000 0
+45.940000 0
+45.960000 0
+45.980000 0
+46.000000 0
+46.020000 0
+46.040000 0
+46.060000 0
+46.080000 0
+46.100000 0
+46.120000 0
+46.140000 0
+46.160000 0
+46.180000 0
+46.200000 0
+46.220000 0
+46.240000 0
+46.260000 0
+46.280000 0
+46.300000 0
+46.320000 0
+46.340000 0
+46.360000 0
+46.380000 0
+46.400000 0
+46.420000 0
+46.440000 0
+46.460000 0
+46.480000 0
+46.500000 0
+46.520000 0
+46.540000 0
+46.560000 0
+46.580000 0
+46.600000 0
+46.620000 0
+46.640000 0
+46.660000 0
+46.680000 0
+46.700000 0
+46.720000 0
+46.740000 0
+46.760000 0
+46.780000 0
+46.800000 0
+46.820000 0
+46.840000 0
+46.860000 0
+46.880000 0
+46.900000 0
+46.920000 0
+46.940000 0
+46.960000 0
+46.980000 0
+47.000000 0
+47.020000 0
+47.040000 0
+47.060000 0
+47.080000 0
+47.100000 0
+47.120000 0
+47.140000 0
+47.160000 0
+47.180000 0
+47.200000 0
+47.220000 0
+47.240000 0
+47.260000 0
+47.280000 0
+47.300000 0
+47.320000 0
+47.340000 0
+47.360000 0
+47.380000 0
+47.400000 0
+47.420000 0
+47.440000 0
+47.460000 0
+47.480000 0
+47.500000 0
+47.520000 0
+47.540000 0
+47.560000 0
+47.580000 0
+47.600000 0
+47.620000 0
+47.640000 0
+47.660000 0
+47.680000 0
+47.700000 0
+47.720000 0
+47.740000 0
+47.760000 0
+47.780000 0
+47.800000 0
+47.820000 0
+47.840000 0
+47.860000 0
+47.880000 0
+47.900000 0
+47.920000 0
+47.940000 0
+47.960000 0
+47.980000 0
+48.000000 0
+48.020000 0
+48.040000 0
+48.060000 0
+48.080000 0
+48.100000 0
+48.120000 0
+48.140000 0
+48.160000 0
+48.180000 0
+48.200000 0
+48.220000 0
+48.240000 0
+48.260000 0
+48.280000 0
+48.300000 0
+48.320000 0
+48.340000 0
+48.360000 0
+48.380000 0
+48.400000 0
+48.420000 0
+48.440000 0
+48.460000 0
+48.480000 0
+48.500000 0
+48.520000 0
+48.540000 0
+48.560000 0
+48.580000 0
+48.600000 0
+48.620000 0
+48.640000 0
+48.660000 0
+48.680000 0
+48.700000 0
+48.720000 0
+48.740000 0
+48.760000 0
+48.780000 0
+48.800000 0
+48.820000 0
+48.840000 0
+48.860000 0
+48.880000 0
+48.900000 0
+48.920000 0
+48.940000 0
+48.960000 0
+48.980000 0
+49.000000 0
+49.020000 0
+49.040000 0
+49.060000 0
+49.080000 0
+49.100000 0
+49.120000 0
+49.140000 0
+49.160000 0
+49.180000 0
+49.200000 0
+49.220000 0
+49.240000 0
+49.260000 0
+49.280000 0
+49.300000 0
+49.320000 0
+49.340000 0
+49.360000 0
+49.380000 0
+49.400000 0
+49.420000 0
+49.440000 0
+49.460000 0
+49.480000 0
+49.500000 0
+49.520000 0
+49.540000 0
+49.560000 0
+49.580000 0
+49.600000 0
+49.620000 0
+49.640000 0
+49.660000 0
+49.680000 0
+49.700000 0
+49.720000 0
+49.740000 0
+49.760000 0
+49.780000 0
+49.800000 0
+49.820000 0
+49.840000 0
+49.860000 0
+49.880000 0
+49.900000 0
+49.920000 0
+49.940000 0
+49.960000 0
+49.980000 0
diff --git a/mrdna/arbdmodel/resources/two_bead_model/zeroNBBB.dat b/mrdna/arbdmodel/resources/two_bead_model/zeroNBBB.dat
new file mode 100644
index 0000000000000000000000000000000000000000..d7795c1ea21660a51ec08be06eaf8b440021d158
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/zeroNBBB.dat
@@ -0,0 +1,720 @@
+0.000000 0
+0.050000 0
+0.100000 0
+0.150000 0
+0.200000 0
+0.250000 0
+0.300000 0
+0.350000 0
+0.400000 0
+0.450000 0
+0.500000 0
+0.550000 0
+0.600000 0
+0.650000 0
+0.700000 0
+0.750000 0
+0.800000 0
+0.850000 0
+0.900000 0
+0.950000 0
+1.000000 0
+1.050000 0
+1.100000 0
+1.150000 0
+1.200000 0
+1.250000 0
+1.300000 0
+1.350000 0
+1.400000 0
+1.450000 0
+1.500000 0
+1.550000 0
+1.600000 0
+1.650000 0
+1.700000 0
+1.750000 0
+1.800000 0
+1.850000 0
+1.900000 0
+1.950000 0
+2.000000 0
+2.050000 0
+2.100000 0
+2.150000 0
+2.200000 0
+2.250000 0
+2.300000 0
+2.350000 0
+2.400000 0
+2.450000 0
+2.500000 0
+2.550000 0
+2.600000 0
+2.650000 0
+2.700000 0
+2.750000 0
+2.800000 0
+2.850000 0
+2.900000 0
+2.950000 0
+3.000000 0
+3.050000 0
+3.100000 0
+3.150000 0
+3.200000 0
+3.250000 0
+3.300000 0
+3.350000 0
+3.400000 0
+3.450000 0
+3.500000 0
+3.550000 0
+3.600000 0
+3.650000 0
+3.700000 0
+3.750000 0
+3.800000 0
+3.850000 0
+3.900000 0
+3.950000 0
+4.000000 0
+4.050000 0
+4.100000 0
+4.150000 0
+4.200000 0
+4.250000 0
+4.300000 0
+4.350000 0
+4.400000 0
+4.450000 0
+4.500000 0
+4.550000 0
+4.600000 0
+4.650000 0
+4.700000 0
+4.750000 0
+4.800000 0
+4.850000 0
+4.900000 0
+4.950000 0
+5.000000 0
+5.050000 0
+5.100000 0
+5.150000 0
+5.200000 0
+5.250000 0
+5.300000 0
+5.350000 0
+5.400000 0
+5.450000 0
+5.500000 0
+5.550000 0
+5.600000 0
+5.650000 0
+5.700000 0
+5.750000 0
+5.800000 0
+5.850000 0
+5.900000 0
+5.950000 0
+6.000000 0
+6.050000 0
+6.100000 0
+6.150000 0
+6.200000 0
+6.250000 0
+6.300000 0
+6.350000 0
+6.400000 0
+6.450000 0
+6.500000 0
+6.550000 0
+6.600000 0
+6.650000 0
+6.700000 0
+6.750000 0
+6.800000 0
+6.850000 0
+6.900000 0
+6.950000 0
+7.000000 0
+7.050000 0
+7.100000 0
+7.150000 0
+7.200000 0
+7.250000 0
+7.300000 0
+7.350000 0
+7.400000 0
+7.450000 0
+7.500000 0
+7.550000 0
+7.600000 0
+7.650000 0
+7.700000 0
+7.750000 0
+7.800000 0
+7.850000 0
+7.900000 0
+7.950000 0
+8.000000 0
+8.050000 0
+8.100000 0
+8.150000 0
+8.200000 0
+8.250000 0
+8.300000 0
+8.350000 0
+8.400000 0
+8.450000 0
+8.500000 0
+8.550000 0
+8.600000 0
+8.650000 0
+8.700000 0
+8.750000 0
+8.800000 0
+8.850000 0
+8.900000 0
+8.950000 0
+9.000000 0
+9.050000 0
+9.100000 0
+9.150000 0
+9.200000 0
+9.250000 0
+9.300000 0
+9.350000 0
+9.400000 0
+9.450000 0
+9.500000 0
+9.550000 0
+9.600000 0
+9.650000 0
+9.700000 0
+9.750000 0
+9.800000 0
+9.850000 0
+9.900000 0
+9.950000 0
+10.000000 0
+10.050000 0
+10.100000 0
+10.150000 0
+10.200000 0
+10.250000 0
+10.300000 0
+10.350000 0
+10.400000 0
+10.450000 0
+10.500000 0
+10.550000 0
+10.600000 0
+10.650000 0
+10.700000 0
+10.750000 0
+10.800000 0
+10.850000 0
+10.900000 0
+10.950000 0
+11.000000 0
+11.050000 0
+11.100000 0
+11.150000 0
+11.200000 0
+11.250000 0
+11.300000 0
+11.350000 0
+11.400000 0
+11.450000 0
+11.500000 0
+11.550000 0
+11.600000 0
+11.650000 0
+11.700000 0
+11.750000 0
+11.800000 0
+11.850000 0
+11.900000 0
+11.950000 0
+12.000000 0
+12.050000 0
+12.100000 0
+12.150000 0
+12.200000 0
+12.250000 0
+12.300000 0
+12.350000 0
+12.400000 0
+12.450000 0
+12.500000 0
+12.550000 0
+12.600000 0
+12.650000 0
+12.700000 0
+12.750000 0
+12.800000 0
+12.850000 0
+12.900000 0
+12.950000 0
+13.000000 0
+13.050000 0
+13.100000 0
+13.150000 0
+13.200000 0
+13.250000 0
+13.300000 0
+13.350000 0
+13.400000 0
+13.450000 0
+13.500000 0
+13.550000 0
+13.600000 0
+13.650000 0
+13.700000 0
+13.750000 0
+13.800000 0
+13.850000 0
+13.900000 0
+13.950000 0
+14.000000 0
+14.050000 0
+14.100000 0
+14.150000 0
+14.200000 0
+14.250000 0
+14.300000 0
+14.350000 0
+14.400000 0
+14.450000 0
+14.500000 0
+14.550000 0
+14.600000 0
+14.650000 0
+14.700000 0
+14.750000 0
+14.800000 0
+14.850000 0
+14.900000 0
+14.950000 0
+15.000000 0
+15.050000 0
+15.100000 0
+15.150000 0
+15.200000 0
+15.250000 0
+15.300000 0
+15.350000 0
+15.400000 0
+15.450000 0
+15.500000 0
+15.550000 0
+15.600000 0
+15.650000 0
+15.700000 0
+15.750000 0
+15.800000 0
+15.850000 0
+15.900000 0
+15.950000 0
+16.000000 0
+16.050000 0
+16.100000 0
+16.150000 0
+16.200000 0
+16.250000 0
+16.300000 0
+16.350000 0
+16.400000 0
+16.450000 0
+16.500000 0
+16.550000 0
+16.600000 0
+16.650000 0
+16.700000 0
+16.750000 0
+16.800000 0
+16.850000 0
+16.900000 0
+16.950000 0
+17.000000 0
+17.050000 0
+17.100000 0
+17.150000 0
+17.200000 0
+17.250000 0
+17.300000 0
+17.350000 0
+17.400000 0
+17.450000 0
+17.500000 0
+17.550000 0
+17.600000 0
+17.650000 0
+17.700000 0
+17.750000 0
+17.800000 0
+17.850000 0
+17.900000 0
+17.950000 0
+18.000000 0
+18.050000 0
+18.100000 0
+18.150000 0
+18.200000 0
+18.250000 0
+18.300000 0
+18.350000 0
+18.400000 0
+18.450000 0
+18.500000 0
+18.550000 0
+18.600000 0
+18.650000 0
+18.700000 0
+18.750000 0
+18.800000 0
+18.850000 0
+18.900000 0
+18.950000 0
+19.000000 0
+19.050000 0
+19.100000 0
+19.150000 0
+19.200000 0
+19.250000 0
+19.300000 0
+19.350000 0
+19.400000 0
+19.450000 0
+19.500000 0
+19.550000 0
+19.600000 0
+19.650000 0
+19.700000 0
+19.750000 0
+19.800000 0
+19.850000 0
+19.900000 0
+19.950000 0
+20.000000 0
+20.050000 0
+20.100000 0
+20.150000 0
+20.200000 0
+20.250000 0
+20.300000 0
+20.350000 0
+20.400000 0
+20.450000 0
+20.500000 0
+20.550000 0
+20.600000 0
+20.650000 0
+20.700000 0
+20.750000 0
+20.800000 0
+20.850000 0
+20.900000 0
+20.950000 0
+21.000000 0
+21.050000 0
+21.100000 0
+21.150000 0
+21.200000 0
+21.250000 0
+21.300000 0
+21.350000 0
+21.400000 0
+21.450000 0
+21.500000 0
+21.550000 0
+21.600000 0
+21.650000 0
+21.700000 0
+21.750000 0
+21.800000 0
+21.850000 0
+21.900000 0
+21.950000 0
+22.000000 0
+22.050000 0
+22.100000 0
+22.150000 0
+22.200000 0
+22.250000 0
+22.300000 0
+22.350000 0
+22.400000 0
+22.450000 0
+22.500000 0
+22.550000 0
+22.600000 0
+22.650000 0
+22.700000 0
+22.750000 0
+22.800000 0
+22.850000 0
+22.900000 0
+22.950000 0
+23.000000 0
+23.050000 0
+23.100000 0
+23.150000 0
+23.200000 0
+23.250000 0
+23.300000 0
+23.350000 0
+23.400000 0
+23.450000 0
+23.500000 0
+23.550000 0
+23.600000 0
+23.650000 0
+23.700000 0
+23.750000 0
+23.800000 0
+23.850000 0
+23.900000 0
+23.950000 0
+24.000000 0
+24.050000 0
+24.100000 0
+24.150000 0
+24.200000 0
+24.250000 0
+24.300000 0
+24.350000 0
+24.400000 0
+24.450000 0
+24.500000 0
+24.550000 0
+24.600000 0
+24.650000 0
+24.700000 0
+24.750000 0
+24.800000 0
+24.850000 0
+24.900000 0
+24.950000 0
+25.000000 0
+25.050000 0
+25.100000 0
+25.150000 0
+25.200000 0
+25.250000 0
+25.300000 0
+25.350000 0
+25.400000 0
+25.450000 0
+25.500000 0
+25.550000 0
+25.600000 0
+25.650000 0
+25.700000 0
+25.750000 0
+25.800000 0
+25.850000 0
+25.900000 0
+25.950000 0
+26.000000 0
+26.050000 0
+26.100000 0
+26.150000 0
+26.200000 0
+26.250000 0
+26.300000 0
+26.350000 0
+26.400000 0
+26.450000 0
+26.500000 0
+26.550000 0
+26.600000 0
+26.650000 0
+26.700000 0
+26.750000 0
+26.800000 0
+26.850000 0
+26.900000 0
+26.950000 0
+27.000000 0
+27.050000 0
+27.100000 0
+27.150000 0
+27.200000 0
+27.250000 0
+27.300000 0
+27.350000 0
+27.400000 0
+27.450000 0
+27.500000 0
+27.550000 0
+27.600000 0
+27.650000 0
+27.700000 0
+27.750000 0
+27.800000 0
+27.850000 0
+27.900000 0
+27.950000 0
+28.000000 0
+28.050000 0
+28.100000 0
+28.150000 0
+28.200000 0
+28.250000 0
+28.300000 0
+28.350000 0
+28.400000 0
+28.450000 0
+28.500000 0
+28.550000 0
+28.600000 0
+28.650000 0
+28.700000 0
+28.750000 0
+28.800000 0
+28.850000 0
+28.900000 0
+28.950000 0
+29.000000 0
+29.050000 0
+29.100000 0
+29.150000 0
+29.200000 0
+29.250000 0
+29.300000 0
+29.350000 0
+29.400000 0
+29.450000 0
+29.500000 0
+29.550000 0
+29.600000 0
+29.650000 0
+29.700000 0
+29.750000 0
+29.800000 0
+29.850000 0
+29.900000 0
+29.950000 0
+30.000000 0
+30.050000 0
+30.100000 0
+30.150000 0
+30.200000 0
+30.250000 0
+30.300000 0
+30.350000 0
+30.400000 0
+30.450000 0
+30.500000 0
+30.550000 0
+30.600000 0
+30.650000 0
+30.700000 0
+30.750000 0
+30.800000 0
+30.850000 0
+30.900000 0
+30.950000 0
+31.000000 0
+31.050000 0
+31.100000 0
+31.150000 0
+31.200000 0
+31.250000 0
+31.300000 0
+31.350000 0
+31.400000 0
+31.450000 0
+31.500000 0
+31.550000 0
+31.600000 0
+31.650000 0
+31.700000 0
+31.750000 0
+31.800000 0
+31.850000 0
+31.900000 0
+31.950000 0
+32.000000 0
+32.050000 0
+32.100000 0
+32.150000 0
+32.200000 0
+32.250000 0
+32.300000 0
+32.350000 0
+32.400000 0
+32.450000 0
+32.500000 0
+32.550000 0
+32.600000 0
+32.650000 0
+32.700000 0
+32.750000 0
+32.800000 0
+32.850000 0
+32.900000 0
+32.950000 0
+33.000000 0
+33.050000 0
+33.100000 0
+33.150000 0
+33.200000 0
+33.250000 0
+33.300000 0
+33.350000 0
+33.400000 0
+33.450000 0
+33.500000 0
+33.550000 0
+33.600000 0
+33.650000 0
+33.700000 0
+33.750000 0
+33.800000 0
+33.850000 0
+33.900000 0
+33.950000 0
+34.000000 0
+34.050000 0
+34.100000 0
+34.150000 0
+34.200000 0
+34.250000 0
+34.300000 0
+34.350000 0
+34.400000 0
+34.450000 0
+34.500000 0
+34.550000 0
+34.600000 0
+34.650000 0
+34.700000 0
+34.750000 0
+34.800000 0
+34.850000 0
+34.900000 0
+34.950000 0
+35.000000 0
+35.050000 0
+35.100000 0
+35.150000 0
+35.200000 0
+35.250000 0
+35.300000 0
+35.350000 0
+35.400000 0
+35.450000 0
+35.500000 0
+35.550000 0
+35.600000 0
+35.650000 0
+35.700000 0
+35.750000 0
+35.800000 0
+35.850000 0
+35.900000 0
+35.950000 0
diff --git a/mrdna/arbdmodel/resources/two_bead_model/zeroNBPB.dat b/mrdna/arbdmodel/resources/two_bead_model/zeroNBPB.dat
new file mode 100644
index 0000000000000000000000000000000000000000..d7795c1ea21660a51ec08be06eaf8b440021d158
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/zeroNBPB.dat
@@ -0,0 +1,720 @@
+0.000000 0
+0.050000 0
+0.100000 0
+0.150000 0
+0.200000 0
+0.250000 0
+0.300000 0
+0.350000 0
+0.400000 0
+0.450000 0
+0.500000 0
+0.550000 0
+0.600000 0
+0.650000 0
+0.700000 0
+0.750000 0
+0.800000 0
+0.850000 0
+0.900000 0
+0.950000 0
+1.000000 0
+1.050000 0
+1.100000 0
+1.150000 0
+1.200000 0
+1.250000 0
+1.300000 0
+1.350000 0
+1.400000 0
+1.450000 0
+1.500000 0
+1.550000 0
+1.600000 0
+1.650000 0
+1.700000 0
+1.750000 0
+1.800000 0
+1.850000 0
+1.900000 0
+1.950000 0
+2.000000 0
+2.050000 0
+2.100000 0
+2.150000 0
+2.200000 0
+2.250000 0
+2.300000 0
+2.350000 0
+2.400000 0
+2.450000 0
+2.500000 0
+2.550000 0
+2.600000 0
+2.650000 0
+2.700000 0
+2.750000 0
+2.800000 0
+2.850000 0
+2.900000 0
+2.950000 0
+3.000000 0
+3.050000 0
+3.100000 0
+3.150000 0
+3.200000 0
+3.250000 0
+3.300000 0
+3.350000 0
+3.400000 0
+3.450000 0
+3.500000 0
+3.550000 0
+3.600000 0
+3.650000 0
+3.700000 0
+3.750000 0
+3.800000 0
+3.850000 0
+3.900000 0
+3.950000 0
+4.000000 0
+4.050000 0
+4.100000 0
+4.150000 0
+4.200000 0
+4.250000 0
+4.300000 0
+4.350000 0
+4.400000 0
+4.450000 0
+4.500000 0
+4.550000 0
+4.600000 0
+4.650000 0
+4.700000 0
+4.750000 0
+4.800000 0
+4.850000 0
+4.900000 0
+4.950000 0
+5.000000 0
+5.050000 0
+5.100000 0
+5.150000 0
+5.200000 0
+5.250000 0
+5.300000 0
+5.350000 0
+5.400000 0
+5.450000 0
+5.500000 0
+5.550000 0
+5.600000 0
+5.650000 0
+5.700000 0
+5.750000 0
+5.800000 0
+5.850000 0
+5.900000 0
+5.950000 0
+6.000000 0
+6.050000 0
+6.100000 0
+6.150000 0
+6.200000 0
+6.250000 0
+6.300000 0
+6.350000 0
+6.400000 0
+6.450000 0
+6.500000 0
+6.550000 0
+6.600000 0
+6.650000 0
+6.700000 0
+6.750000 0
+6.800000 0
+6.850000 0
+6.900000 0
+6.950000 0
+7.000000 0
+7.050000 0
+7.100000 0
+7.150000 0
+7.200000 0
+7.250000 0
+7.300000 0
+7.350000 0
+7.400000 0
+7.450000 0
+7.500000 0
+7.550000 0
+7.600000 0
+7.650000 0
+7.700000 0
+7.750000 0
+7.800000 0
+7.850000 0
+7.900000 0
+7.950000 0
+8.000000 0
+8.050000 0
+8.100000 0
+8.150000 0
+8.200000 0
+8.250000 0
+8.300000 0
+8.350000 0
+8.400000 0
+8.450000 0
+8.500000 0
+8.550000 0
+8.600000 0
+8.650000 0
+8.700000 0
+8.750000 0
+8.800000 0
+8.850000 0
+8.900000 0
+8.950000 0
+9.000000 0
+9.050000 0
+9.100000 0
+9.150000 0
+9.200000 0
+9.250000 0
+9.300000 0
+9.350000 0
+9.400000 0
+9.450000 0
+9.500000 0
+9.550000 0
+9.600000 0
+9.650000 0
+9.700000 0
+9.750000 0
+9.800000 0
+9.850000 0
+9.900000 0
+9.950000 0
+10.000000 0
+10.050000 0
+10.100000 0
+10.150000 0
+10.200000 0
+10.250000 0
+10.300000 0
+10.350000 0
+10.400000 0
+10.450000 0
+10.500000 0
+10.550000 0
+10.600000 0
+10.650000 0
+10.700000 0
+10.750000 0
+10.800000 0
+10.850000 0
+10.900000 0
+10.950000 0
+11.000000 0
+11.050000 0
+11.100000 0
+11.150000 0
+11.200000 0
+11.250000 0
+11.300000 0
+11.350000 0
+11.400000 0
+11.450000 0
+11.500000 0
+11.550000 0
+11.600000 0
+11.650000 0
+11.700000 0
+11.750000 0
+11.800000 0
+11.850000 0
+11.900000 0
+11.950000 0
+12.000000 0
+12.050000 0
+12.100000 0
+12.150000 0
+12.200000 0
+12.250000 0
+12.300000 0
+12.350000 0
+12.400000 0
+12.450000 0
+12.500000 0
+12.550000 0
+12.600000 0
+12.650000 0
+12.700000 0
+12.750000 0
+12.800000 0
+12.850000 0
+12.900000 0
+12.950000 0
+13.000000 0
+13.050000 0
+13.100000 0
+13.150000 0
+13.200000 0
+13.250000 0
+13.300000 0
+13.350000 0
+13.400000 0
+13.450000 0
+13.500000 0
+13.550000 0
+13.600000 0
+13.650000 0
+13.700000 0
+13.750000 0
+13.800000 0
+13.850000 0
+13.900000 0
+13.950000 0
+14.000000 0
+14.050000 0
+14.100000 0
+14.150000 0
+14.200000 0
+14.250000 0
+14.300000 0
+14.350000 0
+14.400000 0
+14.450000 0
+14.500000 0
+14.550000 0
+14.600000 0
+14.650000 0
+14.700000 0
+14.750000 0
+14.800000 0
+14.850000 0
+14.900000 0
+14.950000 0
+15.000000 0
+15.050000 0
+15.100000 0
+15.150000 0
+15.200000 0
+15.250000 0
+15.300000 0
+15.350000 0
+15.400000 0
+15.450000 0
+15.500000 0
+15.550000 0
+15.600000 0
+15.650000 0
+15.700000 0
+15.750000 0
+15.800000 0
+15.850000 0
+15.900000 0
+15.950000 0
+16.000000 0
+16.050000 0
+16.100000 0
+16.150000 0
+16.200000 0
+16.250000 0
+16.300000 0
+16.350000 0
+16.400000 0
+16.450000 0
+16.500000 0
+16.550000 0
+16.600000 0
+16.650000 0
+16.700000 0
+16.750000 0
+16.800000 0
+16.850000 0
+16.900000 0
+16.950000 0
+17.000000 0
+17.050000 0
+17.100000 0
+17.150000 0
+17.200000 0
+17.250000 0
+17.300000 0
+17.350000 0
+17.400000 0
+17.450000 0
+17.500000 0
+17.550000 0
+17.600000 0
+17.650000 0
+17.700000 0
+17.750000 0
+17.800000 0
+17.850000 0
+17.900000 0
+17.950000 0
+18.000000 0
+18.050000 0
+18.100000 0
+18.150000 0
+18.200000 0
+18.250000 0
+18.300000 0
+18.350000 0
+18.400000 0
+18.450000 0
+18.500000 0
+18.550000 0
+18.600000 0
+18.650000 0
+18.700000 0
+18.750000 0
+18.800000 0
+18.850000 0
+18.900000 0
+18.950000 0
+19.000000 0
+19.050000 0
+19.100000 0
+19.150000 0
+19.200000 0
+19.250000 0
+19.300000 0
+19.350000 0
+19.400000 0
+19.450000 0
+19.500000 0
+19.550000 0
+19.600000 0
+19.650000 0
+19.700000 0
+19.750000 0
+19.800000 0
+19.850000 0
+19.900000 0
+19.950000 0
+20.000000 0
+20.050000 0
+20.100000 0
+20.150000 0
+20.200000 0
+20.250000 0
+20.300000 0
+20.350000 0
+20.400000 0
+20.450000 0
+20.500000 0
+20.550000 0
+20.600000 0
+20.650000 0
+20.700000 0
+20.750000 0
+20.800000 0
+20.850000 0
+20.900000 0
+20.950000 0
+21.000000 0
+21.050000 0
+21.100000 0
+21.150000 0
+21.200000 0
+21.250000 0
+21.300000 0
+21.350000 0
+21.400000 0
+21.450000 0
+21.500000 0
+21.550000 0
+21.600000 0
+21.650000 0
+21.700000 0
+21.750000 0
+21.800000 0
+21.850000 0
+21.900000 0
+21.950000 0
+22.000000 0
+22.050000 0
+22.100000 0
+22.150000 0
+22.200000 0
+22.250000 0
+22.300000 0
+22.350000 0
+22.400000 0
+22.450000 0
+22.500000 0
+22.550000 0
+22.600000 0
+22.650000 0
+22.700000 0
+22.750000 0
+22.800000 0
+22.850000 0
+22.900000 0
+22.950000 0
+23.000000 0
+23.050000 0
+23.100000 0
+23.150000 0
+23.200000 0
+23.250000 0
+23.300000 0
+23.350000 0
+23.400000 0
+23.450000 0
+23.500000 0
+23.550000 0
+23.600000 0
+23.650000 0
+23.700000 0
+23.750000 0
+23.800000 0
+23.850000 0
+23.900000 0
+23.950000 0
+24.000000 0
+24.050000 0
+24.100000 0
+24.150000 0
+24.200000 0
+24.250000 0
+24.300000 0
+24.350000 0
+24.400000 0
+24.450000 0
+24.500000 0
+24.550000 0
+24.600000 0
+24.650000 0
+24.700000 0
+24.750000 0
+24.800000 0
+24.850000 0
+24.900000 0
+24.950000 0
+25.000000 0
+25.050000 0
+25.100000 0
+25.150000 0
+25.200000 0
+25.250000 0
+25.300000 0
+25.350000 0
+25.400000 0
+25.450000 0
+25.500000 0
+25.550000 0
+25.600000 0
+25.650000 0
+25.700000 0
+25.750000 0
+25.800000 0
+25.850000 0
+25.900000 0
+25.950000 0
+26.000000 0
+26.050000 0
+26.100000 0
+26.150000 0
+26.200000 0
+26.250000 0
+26.300000 0
+26.350000 0
+26.400000 0
+26.450000 0
+26.500000 0
+26.550000 0
+26.600000 0
+26.650000 0
+26.700000 0
+26.750000 0
+26.800000 0
+26.850000 0
+26.900000 0
+26.950000 0
+27.000000 0
+27.050000 0
+27.100000 0
+27.150000 0
+27.200000 0
+27.250000 0
+27.300000 0
+27.350000 0
+27.400000 0
+27.450000 0
+27.500000 0
+27.550000 0
+27.600000 0
+27.650000 0
+27.700000 0
+27.750000 0
+27.800000 0
+27.850000 0
+27.900000 0
+27.950000 0
+28.000000 0
+28.050000 0
+28.100000 0
+28.150000 0
+28.200000 0
+28.250000 0
+28.300000 0
+28.350000 0
+28.400000 0
+28.450000 0
+28.500000 0
+28.550000 0
+28.600000 0
+28.650000 0
+28.700000 0
+28.750000 0
+28.800000 0
+28.850000 0
+28.900000 0
+28.950000 0
+29.000000 0
+29.050000 0
+29.100000 0
+29.150000 0
+29.200000 0
+29.250000 0
+29.300000 0
+29.350000 0
+29.400000 0
+29.450000 0
+29.500000 0
+29.550000 0
+29.600000 0
+29.650000 0
+29.700000 0
+29.750000 0
+29.800000 0
+29.850000 0
+29.900000 0
+29.950000 0
+30.000000 0
+30.050000 0
+30.100000 0
+30.150000 0
+30.200000 0
+30.250000 0
+30.300000 0
+30.350000 0
+30.400000 0
+30.450000 0
+30.500000 0
+30.550000 0
+30.600000 0
+30.650000 0
+30.700000 0
+30.750000 0
+30.800000 0
+30.850000 0
+30.900000 0
+30.950000 0
+31.000000 0
+31.050000 0
+31.100000 0
+31.150000 0
+31.200000 0
+31.250000 0
+31.300000 0
+31.350000 0
+31.400000 0
+31.450000 0
+31.500000 0
+31.550000 0
+31.600000 0
+31.650000 0
+31.700000 0
+31.750000 0
+31.800000 0
+31.850000 0
+31.900000 0
+31.950000 0
+32.000000 0
+32.050000 0
+32.100000 0
+32.150000 0
+32.200000 0
+32.250000 0
+32.300000 0
+32.350000 0
+32.400000 0
+32.450000 0
+32.500000 0
+32.550000 0
+32.600000 0
+32.650000 0
+32.700000 0
+32.750000 0
+32.800000 0
+32.850000 0
+32.900000 0
+32.950000 0
+33.000000 0
+33.050000 0
+33.100000 0
+33.150000 0
+33.200000 0
+33.250000 0
+33.300000 0
+33.350000 0
+33.400000 0
+33.450000 0
+33.500000 0
+33.550000 0
+33.600000 0
+33.650000 0
+33.700000 0
+33.750000 0
+33.800000 0
+33.850000 0
+33.900000 0
+33.950000 0
+34.000000 0
+34.050000 0
+34.100000 0
+34.150000 0
+34.200000 0
+34.250000 0
+34.300000 0
+34.350000 0
+34.400000 0
+34.450000 0
+34.500000 0
+34.550000 0
+34.600000 0
+34.650000 0
+34.700000 0
+34.750000 0
+34.800000 0
+34.850000 0
+34.900000 0
+34.950000 0
+35.000000 0
+35.050000 0
+35.100000 0
+35.150000 0
+35.200000 0
+35.250000 0
+35.300000 0
+35.350000 0
+35.400000 0
+35.450000 0
+35.500000 0
+35.550000 0
+35.600000 0
+35.650000 0
+35.700000 0
+35.750000 0
+35.800000 0
+35.850000 0
+35.900000 0
+35.950000 0
diff --git a/mrdna/arbdmodel/resources/two_bead_model/zeroNBPP.dat b/mrdna/arbdmodel/resources/two_bead_model/zeroNBPP.dat
new file mode 100644
index 0000000000000000000000000000000000000000..d7795c1ea21660a51ec08be06eaf8b440021d158
--- /dev/null
+++ b/mrdna/arbdmodel/resources/two_bead_model/zeroNBPP.dat
@@ -0,0 +1,720 @@
+0.000000 0
+0.050000 0
+0.100000 0
+0.150000 0
+0.200000 0
+0.250000 0
+0.300000 0
+0.350000 0
+0.400000 0
+0.450000 0
+0.500000 0
+0.550000 0
+0.600000 0
+0.650000 0
+0.700000 0
+0.750000 0
+0.800000 0
+0.850000 0
+0.900000 0
+0.950000 0
+1.000000 0
+1.050000 0
+1.100000 0
+1.150000 0
+1.200000 0
+1.250000 0
+1.300000 0
+1.350000 0
+1.400000 0
+1.450000 0
+1.500000 0
+1.550000 0
+1.600000 0
+1.650000 0
+1.700000 0
+1.750000 0
+1.800000 0
+1.850000 0
+1.900000 0
+1.950000 0
+2.000000 0
+2.050000 0
+2.100000 0
+2.150000 0
+2.200000 0
+2.250000 0
+2.300000 0
+2.350000 0
+2.400000 0
+2.450000 0
+2.500000 0
+2.550000 0
+2.600000 0
+2.650000 0
+2.700000 0
+2.750000 0
+2.800000 0
+2.850000 0
+2.900000 0
+2.950000 0
+3.000000 0
+3.050000 0
+3.100000 0
+3.150000 0
+3.200000 0
+3.250000 0
+3.300000 0
+3.350000 0
+3.400000 0
+3.450000 0
+3.500000 0
+3.550000 0
+3.600000 0
+3.650000 0
+3.700000 0
+3.750000 0
+3.800000 0
+3.850000 0
+3.900000 0
+3.950000 0
+4.000000 0
+4.050000 0
+4.100000 0
+4.150000 0
+4.200000 0
+4.250000 0
+4.300000 0
+4.350000 0
+4.400000 0
+4.450000 0
+4.500000 0
+4.550000 0
+4.600000 0
+4.650000 0
+4.700000 0
+4.750000 0
+4.800000 0
+4.850000 0
+4.900000 0
+4.950000 0
+5.000000 0
+5.050000 0
+5.100000 0
+5.150000 0
+5.200000 0
+5.250000 0
+5.300000 0
+5.350000 0
+5.400000 0
+5.450000 0
+5.500000 0
+5.550000 0
+5.600000 0
+5.650000 0
+5.700000 0
+5.750000 0
+5.800000 0
+5.850000 0
+5.900000 0
+5.950000 0
+6.000000 0
+6.050000 0
+6.100000 0
+6.150000 0
+6.200000 0
+6.250000 0
+6.300000 0
+6.350000 0
+6.400000 0
+6.450000 0
+6.500000 0
+6.550000 0
+6.600000 0
+6.650000 0
+6.700000 0
+6.750000 0
+6.800000 0
+6.850000 0
+6.900000 0
+6.950000 0
+7.000000 0
+7.050000 0
+7.100000 0
+7.150000 0
+7.200000 0
+7.250000 0
+7.300000 0
+7.350000 0
+7.400000 0
+7.450000 0
+7.500000 0
+7.550000 0
+7.600000 0
+7.650000 0
+7.700000 0
+7.750000 0
+7.800000 0
+7.850000 0
+7.900000 0
+7.950000 0
+8.000000 0
+8.050000 0
+8.100000 0
+8.150000 0
+8.200000 0
+8.250000 0
+8.300000 0
+8.350000 0
+8.400000 0
+8.450000 0
+8.500000 0
+8.550000 0
+8.600000 0
+8.650000 0
+8.700000 0
+8.750000 0
+8.800000 0
+8.850000 0
+8.900000 0
+8.950000 0
+9.000000 0
+9.050000 0
+9.100000 0
+9.150000 0
+9.200000 0
+9.250000 0
+9.300000 0
+9.350000 0
+9.400000 0
+9.450000 0
+9.500000 0
+9.550000 0
+9.600000 0
+9.650000 0
+9.700000 0
+9.750000 0
+9.800000 0
+9.850000 0
+9.900000 0
+9.950000 0
+10.000000 0
+10.050000 0
+10.100000 0
+10.150000 0
+10.200000 0
+10.250000 0
+10.300000 0
+10.350000 0
+10.400000 0
+10.450000 0
+10.500000 0
+10.550000 0
+10.600000 0
+10.650000 0
+10.700000 0
+10.750000 0
+10.800000 0
+10.850000 0
+10.900000 0
+10.950000 0
+11.000000 0
+11.050000 0
+11.100000 0
+11.150000 0
+11.200000 0
+11.250000 0
+11.300000 0
+11.350000 0
+11.400000 0
+11.450000 0
+11.500000 0
+11.550000 0
+11.600000 0
+11.650000 0
+11.700000 0
+11.750000 0
+11.800000 0
+11.850000 0
+11.900000 0
+11.950000 0
+12.000000 0
+12.050000 0
+12.100000 0
+12.150000 0
+12.200000 0
+12.250000 0
+12.300000 0
+12.350000 0
+12.400000 0
+12.450000 0
+12.500000 0
+12.550000 0
+12.600000 0
+12.650000 0
+12.700000 0
+12.750000 0
+12.800000 0
+12.850000 0
+12.900000 0
+12.950000 0
+13.000000 0
+13.050000 0
+13.100000 0
+13.150000 0
+13.200000 0
+13.250000 0
+13.300000 0
+13.350000 0
+13.400000 0
+13.450000 0
+13.500000 0
+13.550000 0
+13.600000 0
+13.650000 0
+13.700000 0
+13.750000 0
+13.800000 0
+13.850000 0
+13.900000 0
+13.950000 0
+14.000000 0
+14.050000 0
+14.100000 0
+14.150000 0
+14.200000 0
+14.250000 0
+14.300000 0
+14.350000 0
+14.400000 0
+14.450000 0
+14.500000 0
+14.550000 0
+14.600000 0
+14.650000 0
+14.700000 0
+14.750000 0
+14.800000 0
+14.850000 0
+14.900000 0
+14.950000 0
+15.000000 0
+15.050000 0
+15.100000 0
+15.150000 0
+15.200000 0
+15.250000 0
+15.300000 0
+15.350000 0
+15.400000 0
+15.450000 0
+15.500000 0
+15.550000 0
+15.600000 0
+15.650000 0
+15.700000 0
+15.750000 0
+15.800000 0
+15.850000 0
+15.900000 0
+15.950000 0
+16.000000 0
+16.050000 0
+16.100000 0
+16.150000 0
+16.200000 0
+16.250000 0
+16.300000 0
+16.350000 0
+16.400000 0
+16.450000 0
+16.500000 0
+16.550000 0
+16.600000 0
+16.650000 0
+16.700000 0
+16.750000 0
+16.800000 0
+16.850000 0
+16.900000 0
+16.950000 0
+17.000000 0
+17.050000 0
+17.100000 0
+17.150000 0
+17.200000 0
+17.250000 0
+17.300000 0
+17.350000 0
+17.400000 0
+17.450000 0
+17.500000 0
+17.550000 0
+17.600000 0
+17.650000 0
+17.700000 0
+17.750000 0
+17.800000 0
+17.850000 0
+17.900000 0
+17.950000 0
+18.000000 0
+18.050000 0
+18.100000 0
+18.150000 0
+18.200000 0
+18.250000 0
+18.300000 0
+18.350000 0
+18.400000 0
+18.450000 0
+18.500000 0
+18.550000 0
+18.600000 0
+18.650000 0
+18.700000 0
+18.750000 0
+18.800000 0
+18.850000 0
+18.900000 0
+18.950000 0
+19.000000 0
+19.050000 0
+19.100000 0
+19.150000 0
+19.200000 0
+19.250000 0
+19.300000 0
+19.350000 0
+19.400000 0
+19.450000 0
+19.500000 0
+19.550000 0
+19.600000 0
+19.650000 0
+19.700000 0
+19.750000 0
+19.800000 0
+19.850000 0
+19.900000 0
+19.950000 0
+20.000000 0
+20.050000 0
+20.100000 0
+20.150000 0
+20.200000 0
+20.250000 0
+20.300000 0
+20.350000 0
+20.400000 0
+20.450000 0
+20.500000 0
+20.550000 0
+20.600000 0
+20.650000 0
+20.700000 0
+20.750000 0
+20.800000 0
+20.850000 0
+20.900000 0
+20.950000 0
+21.000000 0
+21.050000 0
+21.100000 0
+21.150000 0
+21.200000 0
+21.250000 0
+21.300000 0
+21.350000 0
+21.400000 0
+21.450000 0
+21.500000 0
+21.550000 0
+21.600000 0
+21.650000 0
+21.700000 0
+21.750000 0
+21.800000 0
+21.850000 0
+21.900000 0
+21.950000 0
+22.000000 0
+22.050000 0
+22.100000 0
+22.150000 0
+22.200000 0
+22.250000 0
+22.300000 0
+22.350000 0
+22.400000 0
+22.450000 0
+22.500000 0
+22.550000 0
+22.600000 0
+22.650000 0
+22.700000 0
+22.750000 0
+22.800000 0
+22.850000 0
+22.900000 0
+22.950000 0
+23.000000 0
+23.050000 0
+23.100000 0
+23.150000 0
+23.200000 0
+23.250000 0
+23.300000 0
+23.350000 0
+23.400000 0
+23.450000 0
+23.500000 0
+23.550000 0
+23.600000 0
+23.650000 0
+23.700000 0
+23.750000 0
+23.800000 0
+23.850000 0
+23.900000 0
+23.950000 0
+24.000000 0
+24.050000 0
+24.100000 0
+24.150000 0
+24.200000 0
+24.250000 0
+24.300000 0
+24.350000 0
+24.400000 0
+24.450000 0
+24.500000 0
+24.550000 0
+24.600000 0
+24.650000 0
+24.700000 0
+24.750000 0
+24.800000 0
+24.850000 0
+24.900000 0
+24.950000 0
+25.000000 0
+25.050000 0
+25.100000 0
+25.150000 0
+25.200000 0
+25.250000 0
+25.300000 0
+25.350000 0
+25.400000 0
+25.450000 0
+25.500000 0
+25.550000 0
+25.600000 0
+25.650000 0
+25.700000 0
+25.750000 0
+25.800000 0
+25.850000 0
+25.900000 0
+25.950000 0
+26.000000 0
+26.050000 0
+26.100000 0
+26.150000 0
+26.200000 0
+26.250000 0
+26.300000 0
+26.350000 0
+26.400000 0
+26.450000 0
+26.500000 0
+26.550000 0
+26.600000 0
+26.650000 0
+26.700000 0
+26.750000 0
+26.800000 0
+26.850000 0
+26.900000 0
+26.950000 0
+27.000000 0
+27.050000 0
+27.100000 0
+27.150000 0
+27.200000 0
+27.250000 0
+27.300000 0
+27.350000 0
+27.400000 0
+27.450000 0
+27.500000 0
+27.550000 0
+27.600000 0
+27.650000 0
+27.700000 0
+27.750000 0
+27.800000 0
+27.850000 0
+27.900000 0
+27.950000 0
+28.000000 0
+28.050000 0
+28.100000 0
+28.150000 0
+28.200000 0
+28.250000 0
+28.300000 0
+28.350000 0
+28.400000 0
+28.450000 0
+28.500000 0
+28.550000 0
+28.600000 0
+28.650000 0
+28.700000 0
+28.750000 0
+28.800000 0
+28.850000 0
+28.900000 0
+28.950000 0
+29.000000 0
+29.050000 0
+29.100000 0
+29.150000 0
+29.200000 0
+29.250000 0
+29.300000 0
+29.350000 0
+29.400000 0
+29.450000 0
+29.500000 0
+29.550000 0
+29.600000 0
+29.650000 0
+29.700000 0
+29.750000 0
+29.800000 0
+29.850000 0
+29.900000 0
+29.950000 0
+30.000000 0
+30.050000 0
+30.100000 0
+30.150000 0
+30.200000 0
+30.250000 0
+30.300000 0
+30.350000 0
+30.400000 0
+30.450000 0
+30.500000 0
+30.550000 0
+30.600000 0
+30.650000 0
+30.700000 0
+30.750000 0
+30.800000 0
+30.850000 0
+30.900000 0
+30.950000 0
+31.000000 0
+31.050000 0
+31.100000 0
+31.150000 0
+31.200000 0
+31.250000 0
+31.300000 0
+31.350000 0
+31.400000 0
+31.450000 0
+31.500000 0
+31.550000 0
+31.600000 0
+31.650000 0
+31.700000 0
+31.750000 0
+31.800000 0
+31.850000 0
+31.900000 0
+31.950000 0
+32.000000 0
+32.050000 0
+32.100000 0
+32.150000 0
+32.200000 0
+32.250000 0
+32.300000 0
+32.350000 0
+32.400000 0
+32.450000 0
+32.500000 0
+32.550000 0
+32.600000 0
+32.650000 0
+32.700000 0
+32.750000 0
+32.800000 0
+32.850000 0
+32.900000 0
+32.950000 0
+33.000000 0
+33.050000 0
+33.100000 0
+33.150000 0
+33.200000 0
+33.250000 0
+33.300000 0
+33.350000 0
+33.400000 0
+33.450000 0
+33.500000 0
+33.550000 0
+33.600000 0
+33.650000 0
+33.700000 0
+33.750000 0
+33.800000 0
+33.850000 0
+33.900000 0
+33.950000 0
+34.000000 0
+34.050000 0
+34.100000 0
+34.150000 0
+34.200000 0
+34.250000 0
+34.300000 0
+34.350000 0
+34.400000 0
+34.450000 0
+34.500000 0
+34.550000 0
+34.600000 0
+34.650000 0
+34.700000 0
+34.750000 0
+34.800000 0
+34.850000 0
+34.900000 0
+34.950000 0
+35.000000 0
+35.050000 0
+35.100000 0
+35.150000 0
+35.200000 0
+35.250000 0
+35.300000 0
+35.350000 0
+35.400000 0
+35.450000 0
+35.500000 0
+35.550000 0
+35.600000 0
+35.650000 0
+35.700000 0
+35.750000 0
+35.800000 0
+35.850000 0
+35.900000 0
+35.950000 0
diff --git a/mrdna/arbdmodel/segmentmodel.py b/mrdna/arbdmodel/segmentmodel.py
new file mode 100644
index 0000000000000000000000000000000000000000..3a45e74697b56bb89a5610e59823b972b52b093e
--- /dev/null
+++ b/mrdna/arbdmodel/segmentmodel.py
@@ -0,0 +1,3090 @@
+import pdb
+from pathlib import Path
+import numpy as np
+import random
+from .model.arbdmodel import PointParticle, ParticleType, Group, ArbdModel
+from .coords import rotationAboutAxis, quaternion_from_matrix, quaternion_to_matrix
+from .model.nonbonded import *
+from copy import copy, deepcopy
+from .model.nbPot import nbDnaScheme
+
+from scipy.special import erf
+import scipy.optimize as opt
+from scipy import interpolate
+
+from .model.CanonicalNucleotideAtoms import canonicalNtFwd, canonicalNtRev, seqComplement
+from .model.CanonicalNucleotideAtoms import enmTemplateHC, enmTemplateSQ, enmCorrectionsHC
+
+from .model.spring_from_lp import k_angle as angle_spring_from_lp
+
+# import pdb
+"""
+TODO:
+ + fix handling of crossovers for atomic representation
+ + map to atomic representation
+    + add nicks
+    + transform ssDNA nucleotides 
+    - shrink ssDNA
+    + shrink dsDNA backbone
+    + make orientation continuous
+    + sequence
+    + handle circular dna
+ + ensure crossover bead potentials aren't applied twice 
+ + remove performance bottlenecks
+ - test for large systems
+ + assign sequence
+ + ENM
+ - rework Location class 
+ - remove recursive calls
+ - document
+ - develop unit test suite
+"""
+class CircularDnaError(Exception):
+    pass
+
+class ParticleNotConnectedError(Exception):
+    pass
+
+class Location():
+    """ Site for connection within an object """
+    def __init__(self, container, address, type_, on_fwd_strand = True):
+        ## TODO: remove cyclic references(?)
+        self.container = container
+        self.address = address  # represents position along contour length in segment
+        # assert( type_ in ("end3","end5") ) # TODO remove or make conditional
+        self.on_fwd_strand = on_fwd_strand
+        self.type_ = type_
+        self.particle = None
+        self.connection = None
+        self.is_3prime_side_of_connection = None
+
+        self.prev_in_strand = None
+        self.next_in_strand = None
+        
+        self.combine = None     # some locations might be combined in bead model 
+
+    def get_connected_location(self):
+        if self.connection is None:
+            return None
+        else:
+            return self.connection.other(self)
+
+    def set_connection(self, connection, is_3prime_side_of_connection):
+        self.connection = connection # TODO weakref? 
+        self.is_3prime_side_of_connection = is_3prime_side_of_connection
+
+    def get_nt_pos(self):
+        try:
+            pos = self.container.contour_to_nt_pos(self.address, round_nt=True)
+        except:
+            if self.address == 0:
+                pos = 0
+            elif self.address == 1:
+                pos = self.container.num_nt-1
+            else:
+                raise
+        return pos
+
+    def __repr__(self):
+        if self.on_fwd_strand:
+            on_fwd = "on_fwd_strand"
+        else:
+            on_fwd = "on_rev_strand"
+        return "<Location {}.{}[{:.2f},{:d}]>".format( self.container.name, self.type_, self.address, self.on_fwd_strand)
+        
+class Connection():
+    """ Abstract base class for connection between two elements """
+    def __init__(self, A, B, type_ = None):
+        assert( isinstance(A,Location) )
+        assert( isinstance(B,Location) )
+        self.A = A
+        self.B = B
+        self.type_ = type_
+        
+    def other(self, location):
+        if location is self.A:
+            return self.B
+        elif location is self.B:
+            return self.A
+        else:
+            raise Exception("OutOfBoundsError")
+
+    def delete(self):
+        self.A.container.connections.remove(self)
+        if self.B.container is not self.A.container:
+            self.B.container.connections.remove(self)
+        self.A.connection = None
+        self.B.connection = None
+
+    def __repr__(self):
+        return "<Connection {}--{}--{}]>".format( self.A, self.type_, self.B )
+        
+
+        
+# class ConnectableElement(Transformable):
+class ConnectableElement():
+    """ Abstract base class """
+    def __init__(self, connection_locations=None, connections=None):
+        if connection_locations is None: connection_locations = []
+        if connections is None: connections = []
+
+        ## TODO decide on names
+        self.locations = self.connection_locations = connection_locations
+        self.connections = connections
+
+    def get_locations(self, type_=None, exclude=()):
+        locs = [l for l in self.connection_locations if (type_ is None or l.type_ == type_) and l.type_ not in exclude]
+        counter = dict()
+        for l in locs:
+            if l in counter:
+                counter[l] += 1
+            else:
+                counter[l] = 1
+        assert( np.all( [counter[l] == 1 for l in locs] ) )
+        return locs
+
+    def get_location_at(self, address, on_fwd_strand=True, new_type="crossover"):
+        loc = None
+        if (self.num_nt == 1):
+            # import pdb
+            # pdb.set_trace()
+            ## Assumes that intrahelical connections have been made before crossovers
+            for l in self.locations:
+                if l.on_fwd_strand == on_fwd_strand and l.connection is None:
+                    assert(loc is None)
+                    loc = l
+            # assert( loc is not None )
+        else:
+            for l in self.locations:
+                if l.address == address and l.on_fwd_strand == on_fwd_strand:
+                    assert(loc is None)
+                    loc = l
+        if loc is None:
+            loc = Location( self, address=address, type_=new_type, on_fwd_strand=on_fwd_strand )
+        return loc
+
+    def get_connections_and_locations(self, connection_type=None, exclude=()):
+        """ Returns a list with each entry of the form:
+            connection, location_in_self, location_in_other """
+        type_ = connection_type
+        ret = []
+        for c in self.connections:
+            if (type_ is None or c.type_ == type_) and c.type_ not in exclude:
+                if   c.A.container is self:
+                    ret.append( [c, c.A, c.B] )
+                elif c.B.container is self:
+                    ret.append( [c, c.B, c.A] )
+                else:
+                    import pdb
+                    pdb.set_trace()
+                    raise Exception("Object contains connection that fails to refer to object")
+        return ret
+
+    def _connect(self, other, connection, in_3prime_direction=None):
+        ## TODO fix circular references        
+        A,B = [connection.A, connection.B]
+        if in_3prime_direction is not None:
+            A.is_3prime_side_of_connection = not in_3prime_direction
+            B.is_3prime_side_of_connection = in_3prime_direction
+            
+        A.connection = B.connection = connection
+        self.connections.append(connection)
+        if other is not self:
+            other.connections.append(connection)
+        else:
+            raise NotImplementedError("Segments cannot yet be connected to themselves; if you are attempting to make a circular object, try breaking the object into multiple segments")
+        l = A.container.locations
+        if A not in l: l.append(A)
+        l = B.container.locations
+        if B not in l: l.append(B)
+        
+
+    # def _find_connections(self, loc):
+    #     return [c for c in self.connections if c.A == loc or c.B == loc]
+
+class SegmentParticle(PointParticle):
+    def __init__(self, type_, position, name="A", **kwargs):
+        self.name = name
+        self.contour_position = None
+        PointParticle.__init__(self, type_, position, name=name, **kwargs)
+        self.intrahelical_neighbors = []
+        self.other_neighbors = []
+        self.locations = []
+
+    def get_intrahelical_above(self):
+        """ Returns bead directly above self """
+        # assert( len(self.intrahelical_neighbors) <= 2 )
+        for b in self.intrahelical_neighbors:
+            if b.get_contour_position(self.parent, self.contour_position) > self.contour_position:
+                return b
+
+    def get_intrahelical_below(self):
+        """ Returns bead directly below self """
+        # assert( len(self.intrahelical_neighbors) <= 2 )
+        for b in self.intrahelical_neighbors:
+            if b.get_contour_position(self.parent, self.contour_position) < self.contour_position:
+                return b
+
+    def _neighbor_should_be_added(self,b):
+        if type(self.parent) != type(b.parent):
+            return True
+
+        c1 = self.contour_position
+        c2 = b.get_contour_position(self.parent,c1)
+        if c2 < c1:
+            b0 = self.get_intrahelical_below()
+        else:
+            b0 = self.get_intrahelical_above()
+
+        if b0 is not None:            
+            c0 = b0.get_contour_position(self.parent,c1)
+            if np.abs(c2-c1) < np.abs(c0-c1):
+                ## remove b0
+                self.intrahelical_neighbors.remove(b0)
+                b0.intrahelical_neighbors.remove(self)
+                return True
+            else:
+                return False
+        return True
+        
+    def make_intrahelical_neighbor(self,b):
+        add1 = self._neighbor_should_be_added(b)
+        add2 = b._neighbor_should_be_added(self)
+        if add1 and add2:
+            # assert(len(b.intrahelical_neighbors) <= 1)
+            # assert(len(self.intrahelical_neighbors) <= 1)
+            self.intrahelical_neighbors.append(b)
+            b.intrahelical_neighbors.append(self)
+
+    def conceptual_get_position(self, context):
+        """ 
+        context: object
+
+Q: does this function do too much?
+Danger of mixing return values
+
+Q: does context describe the system or present an argument?
+        """
+
+        ## Validate Inputs
+        ...
+
+        ## Algorithm
+        """
+context specifies:
+  - kind of output: real space, nt within segment, fraction of segment
+  - absolute or relative
+  - constraints: e.g. if passing through
+        """
+        """
+given context, provide the position
+        input
+"""
+
+    def get_nt_position(self, seg, near_address=None):
+        """ Returns the "address" of the nucleotide relative to seg in
+        nucleotides, taking the shortest (intrahelical) contour length route to seg
+        """
+        if seg == self.parent:
+            pos = self.contour_position
+        else:
+            pos = self.get_contour_position(seg,near_address)
+        return seg.contour_to_nt_pos(pos)
+
+    def get_contour_position(self,seg, address = None):
+        """ TODO: fix paradigm where a bead maps to exactly one location in a polymer
+        - One way: modify get_contour_position to take an optional argument that indicates where in the polymer you are looking from
+        """
+
+        if seg == self.parent:
+            return self.contour_position
+        else:
+            cutoff = 30*3
+            target_seg = seg
+
+            ## depth-first search
+            ## TODO cache distances to nearby locations?
+            def descend_search_tree(seg, contour_in_seg, distance=0, visited_segs=None):
+                nonlocal cutoff
+                if visited_segs is None: visited_segs = []
+
+                if seg == target_seg:
+                    # pdb.set_trace()
+                    ## Found a segment in our target
+                    sign = 1 if contour_in_seg == 1 else -1
+                    if sign == -1: assert( contour_in_seg == 0 )
+                    if distance < cutoff: # TODO: check if this does anything
+                        cutoff = distance
+                    return [[distance, contour_in_seg+sign*seg.nt_pos_to_contour(distance)]], [(seg, contour_in_seg, distance)]
+                if distance > cutoff:
+                    return None,None
+                    
+                ret_list = []
+                hist_list = []
+                ## Find intrahelical locations in seg that we might pass through
+                conn_locs = seg.get_connections_and_locations("intrahelical")
+                if isinstance(target_seg, SingleStrandedSegment):
+                    tmp = seg.get_connections_and_locations("sscrossover")
+                    conn_locs = conn_locs + list(filter(lambda x: x[2].container == target_seg, tmp))
+                for c,A,B in conn_locs:
+                    if B.container in visited_segs: continue
+                    dx = seg.contour_to_nt_pos( A.address, round_nt=False ) - seg.contour_to_nt_pos( contour_in_seg, round_nt=False)
+                    dx = np.abs(dx)
+                    results,history = descend_search_tree( B.container, B.address,
+                                                   distance+dx, visited_segs + [seg] )
+                    if results is not None:
+                        ret_list.extend( results )
+                        hist_list.extend( history )
+                return ret_list,hist_list
+
+            results,history = descend_search_tree(self.parent, self.contour_position)
+            if results is None or len(results) == 0:
+                raise Exception("Could not find location in segment") # TODO better error
+            if address is not None:
+                return sorted(results,key=lambda x:(x[0],(x[1]-address)**2))[0][1]
+            else:
+                return sorted(results,key=lambda x:x[0])[0][1]
+            # nt_pos = self.get_nt_position(seg)
+            # return seg.nt_pos_to_contour(nt_pos)
+
+    def update_position(self, contour_position):
+        self.contour_position = contour_position
+        self.position = self.parent.contour_to_position(contour_position)
+        if 'orientation_bead' in self.__dict__:
+            o = self.orientation_bead
+            o.contour_position = contour_position
+            orientation = self.parent.contour_to_orientation(contour_position)
+            if orientation is None:
+                print("WARNING: local_twist is True, but orientation is None; using identity")
+                orientation = np.eye(3)
+            o.position = self.position + orientation.dot( np.array((Segment.orientation_bond.r0,0,0)) )
+            
+    def __repr__(self):
+        return "<SegmentParticle {} on {}[{:.2f}]>".format( self.name, self.parent, self.contour_position)
+
+
+## TODO break this class into smaller, better encapsulated pieces
+class Segment(ConnectableElement, Group):
+
+    """ Base class that describes a segment of DNA. When built from
+    cadnano models, should not span helices """
+
+    """Define basic particle types"""
+    dsDNA_particle = ParticleType("D",
+                                  diffusivity = 43.5,
+                                  mass = 300,
+                                  radius = 3,                 
+                              )
+    orientation_particle = ParticleType("O",
+                                        diffusivity = 100,
+                                        mass = 300,
+                                        radius = 1,
+                                    )
+
+    # orientation_bond = HarmonicBond(10,2)
+    orientation_bond = HarmonicBond(30,1.5, rRange = (0,500) )
+
+    ssDNA_particle = ParticleType("S",
+                                  diffusivity = 43.5,
+                                  mass = 150,
+                                  radius = 3,                 
+                              )
+
+    def __init__(self, name, num_nt, 
+                 start_position = None,
+                 end_position = None, 
+                 segment_model = None,
+                 **kwargs):
+
+        if start_position is None: start_position = np.array((0,0,0))
+
+        Group.__init__(self, name, children=[], **kwargs)
+        ConnectableElement.__init__(self, connection_locations=[], connections=[])
+
+        if 'segname' not in kwargs:
+            self.segname = name
+        # self.resname = name
+        self.start_orientation = None
+        self.twist_per_nt = 0
+
+        self.beads = [c for c in self.children] # self.beads will not contain orientation beads
+
+        self._bead_model_generation = 0    # TODO: remove?
+        self.segment_model = segment_model # TODO: remove?
+
+        self.strand_pieces = dict()
+        for d in ('fwd','rev'):
+            self.strand_pieces[d] = []
+
+        self.num_nt = int(num_nt)
+        if end_position is None:
+            end_position = np.array((0,0,self.distance_per_nt*num_nt)) + start_position
+        self.start_position = start_position
+        self.end_position = end_position
+
+        ## Used to assign cadnano names to beads
+        self._generate_bead_callbacks = []
+        self._generate_nucleotide_callbacks = []
+
+        ## Set up interpolation for positions
+        self._set_splines_from_ends()
+
+        self.sequence = None
+
+    def __repr__(self):
+        return "<{} {}[{:d}]>".format( type(self), self.name, self.num_nt )
+
+    def set_splines(self, contours, coords):
+        tck, u = interpolate.splprep( coords.T, u=contours, s=0, k=1)
+        self.position_spline_params = (tck,u)
+
+    def set_orientation_splines(self, contours, quaternions):
+        tck, u = interpolate.splprep( quaternions.T, u=contours, s=0, k=1)
+        self.quaternion_spline_params = (tck,u)
+
+    def get_center(self):
+        tck, u = self.position_spline_params
+        return np.mean(self.contour_to_position(u), axis=0)
+
+    def _get_location_positions(self):
+        return [self.contour_to_nt_pos(l.address) for l in self.locations]
+
+    def insert_dna(self, at_nt: int, num_nt: int, seq=tuple()):
+        assert(np.isclose(np.around(num_nt),num_nt))
+        if at_nt < 0:
+            raise ValueError("Attempted to insert DNA into {} at a negative location".format(self))
+        if at_nt > self.num_nt-1:
+            raise ValueError("Attempted to insert DNA into {} at beyond the end of the Segment".format(self))
+        if num_nt < 0:
+            raise ValueError("Attempted to insert DNA a negative amount of DNA into {}".format(self))
+
+        num_nt = np.around(num_nt)
+        nt_positions = self._get_location_positions()
+        new_nt_positions = [p if p <= at_nt else p+num_nt for p in nt_positions]
+
+        ## TODO: handle sequence
+
+        self.num_nt = self.num_nt+num_nt
+
+        for l,p in zip(self.locations, new_nt_positions):
+            l.address = self.nt_pos_to_contour(p)
+
+    def remove_dna(self, first_nt: int, last_nt: int):
+        """ Removes nucleotides between first_nt and last_nt, inclusive """
+        assert(np.isclose(np.around(first_nt),first_nt))
+        assert(np.isclose(np.around(last_nt),last_nt))
+        tmp = min((first_nt,last_nt))
+        last_nt = max((first_nt,last_nt))
+        fist_nt = tmp
+
+        if first_nt < 0 or first_nt > self.num_nt-2:
+            raise ValueError("Attempted to remove DNA from {} starting at an invalid location {}".format(self, first_nt))
+        if last_nt < 1 or last_nt > self.num_nt-1:
+            raise ValueError("Attempted to remove DNA from {} ending at an invalid location {}".format(self, last_nt))
+        if first_nt == last_nt:
+            return
+
+        first_nt = np.around(first_nt)
+        last_nt = np.around(last_nt)
+
+        nt_positions = self._get_location_positions()
+
+        bad_locations = list(filter(lambda p: p >= first_nt and p <= last_nt, nt_positions))
+        if len(bad_locations) > 0:
+            raise Exception("Attempted to remove DNA containing locations {} from {} between {} and {}".format(bad_locations,self,first_nt,last_nt))
+
+        removed_nt = last_nt-first_nt+1
+        new_nt_positions = [p if p <= last_nt else p-removed_nt for p in nt_positions]
+        num_nt = self.num_nt-removed_nt
+
+        if self.sequence is not None and len(self.sequence) == self.num_nt:
+            self.sequence = [s for s,i in zip(self.sequence,range(self.num_nt)) 
+                                if i < first_nt or i > last_nt]
+            assert( len(self.sequence) == num_nt )
+
+        self.num_nt = num_nt
+
+        for l,p in zip(self.locations, new_nt_positions):
+            l.address = self.nt_pos_to_contour(p)
+
+    def __filter_contours(contours, positions, position_filter, contour_filter):
+        u = contours
+        r = positions
+
+        ## Filter
+        ids = list(range(len(u)))
+        if contour_filter is not None:
+            ids = list(filter(lambda i: contour_filter(u[i]), ids))
+        if position_filter is not None:
+            ids = list(filter(lambda i: position_filter(r[i,:]), ids))
+        return ids
+
+    def translate(self, translation_vector, position_filter=None, contour_filter=None):
+        dr = np.array(translation_vector)
+        tck, u = self.position_spline_params
+        r = self.contour_to_position(u)
+
+        ids = Segment.__filter_contours(u, r, position_filter, contour_filter)
+        if len(ids) == 0: return
+
+        ## Translate
+        r[ids,:] = r[ids,:] + dr[np.newaxis,:]
+        self.set_splines(u,r)
+
+    def rotate(self, rotation_matrix, about=None, position_filter=None, contour_filter=None):
+        tck, u = self.position_spline_params
+        r = self.contour_to_position(u)
+
+        ids = Segment.__filter_contours(u, r, position_filter, contour_filter)
+        if len(ids) == 0: return
+
+        if about is None:
+            ## TODO: do this more efficiently
+            r[ids,:] = np.array([rotation_matrix.dot(r[i,:]) for i in ids])
+        else:
+            dr = np.array(about)
+            ## TODO: do this more efficiently
+            r[ids,:] = np.array([rotation_matrix.dot(r[i,:]-dr) + dr for i in ids])
+
+        self.set_splines(u,r)
+
+        if self.quaternion_spline_params is not None:
+            ## TODO: performance: don't shift between quaternion and matrix representations so much
+            tck, u = self.quaternion_spline_params
+            orientations = [self.contour_to_orientation(v) for v in u]
+            for i in ids:
+                orientations[i,:] = rotation_matrix.dot(orientations[i])
+            quats = [quaternion_from_matrix(o) for o in orientations]
+            self.set_orientation_splines(u, quats)
+
+    def _set_splines_from_ends(self, resolution=4):
+        self.quaternion_spline_params = None
+        r0 = np.array(self.start_position)[np.newaxis,:]
+        r1 = np.array(self.end_position)[np.newaxis,:]
+        u = np.linspace(0,1, max(3,self.num_nt//int(resolution)))
+        s = u[:,np.newaxis]
+        coords = (1-s)*r0 + s*r1
+        self.set_splines(u, coords)
+
+    def clear_all(self):
+        Group.clear_all(self)  # TODO: use super?
+        self.beads = []
+        # for c,loc,other in self.get_connections_and_locations():
+        #     loc.particle = None
+        #     other.particle = None
+        for l in self.locations:
+            l.particle = None
+
+    def contour_to_nt_pos(self, contour_pos, round_nt=False):
+        nt = contour_pos*(self.num_nt) - 0.5
+        if round_nt:
+            assert( np.isclose(np.around(nt),nt) )
+            nt = np.around(nt)
+        return nt
+
+    def nt_pos_to_contour(self,nt_pos):
+        return (nt_pos+0.5)/(self.num_nt)
+
+    def contour_to_position(self,s):
+        p = interpolate.splev( s, self.position_spline_params[0] )
+        if len(p) > 1: p = np.array(p).T
+        return p
+
+    def contour_to_tangent(self,s):
+        t = interpolate.splev( s, self.position_spline_params[0], der=1 )
+        t = (t / np.linalg.norm(t,axis=0))
+        return t.T
+        
+
+    def contour_to_orientation(self,s):
+        assert( isinstance(s,float) or isinstance(s,int) or len(s) == 1 )   # TODO make vectorized version
+
+        if self.quaternion_spline_params is None:
+            axis = self.contour_to_tangent(s)
+            axis = axis / np.linalg.norm(axis)
+            rotAxis = np.cross(axis,np.array((0,0,1)))
+            rotAxisL = np.linalg.norm(rotAxis)
+            zAxis = np.array((0,0,1))
+
+            if rotAxisL > 0.001:
+                theta = np.arcsin(rotAxisL) * 180/np.pi
+                if axis.dot(zAxis) < 0: theta = 180-theta
+                orientation0 = rotationAboutAxis( rotAxis/rotAxisL, theta, normalizeAxis=False ).T
+            else:
+                orientation0 = np.eye(3) if axis.dot(zAxis) > 0 else \
+                               rotationAboutAxis( np.array((1,0,0)), 180, normalizeAxis=False )
+            if self.start_orientation is not None:
+                orientation0 = orientation0.dot(self.start_orientation)
+
+            orientation = rotationAboutAxis( axis, self.twist_per_nt*self.contour_to_nt_pos(s), normalizeAxis=False )
+            orientation = orientation.dot(orientation0)
+        else:
+            q = interpolate.splev( s, self.quaternion_spline_params[0] )
+            if len(q) > 1: q = np.array(q).T # TODO: is this needed?
+            orientation = quaternion_to_matrix(q)
+
+        return orientation
+
+    def get_contour_sorted_connections_and_locations(self,type_):
+        sort_fn = lambda c: c[1].address
+        cl = self.get_connections_and_locations(type_)
+        return sorted(cl, key=sort_fn)
+    
+    def randomize_unset_sequence(self):
+        bases = list(seqComplement.keys())
+        # bases = ['T']        ## FOR DEBUG
+        if self.sequence is None:
+            self.sequence = [random.choice(bases) for i in range(self.num_nt)]
+        else:
+            assert(len(self.sequence) == self.num_nt) # TODO move
+            for i in range(len(self.sequence)):
+                if self.sequence[i] is None:
+                    self.sequence[i] = random.choice(bases)
+
+    def _get_num_beads(self, max_basepairs_per_bead, max_nucleotides_per_bead ):
+        raise NotImplementedError
+
+    def _generate_one_bead(self, contour_position, nts):
+        raise NotImplementedError
+
+    def _generate_atomic_nucleotide(self, contour_position, is_fwd, seq, scale, strand_segment):
+        """ Seq should include modifications like 5T, T3 Tsinglet; direction matters too """
+
+        # print("Generating nucleotide at {}".format(contour_position))
+        
+        pos = self.contour_to_position(contour_position)
+        orientation = self.contour_to_orientation(contour_position)
+
+        """ deleteme
+        ## TODO: move this code (?)
+        if orientation is None:
+            import pdb
+            pdb.set_trace()
+            axis = self.contour_to_tangent(contour_position)
+            angleVec = np.array([1,0,0])
+            if axis.dot(angleVec) > 0.9: angleVec = np.array([0,1,0])
+            angleVec = angleVec - angleVec.dot(axis)*axis
+            angleVec = angleVec/np.linalg.norm(angleVec)
+            y = np.cross(axis,angleVec)
+            orientation = np.array([angleVec,y,axis]).T
+            ## TODO: improve placement of ssDNA
+            # rot = rotationAboutAxis( axis, contour_position*self.twist_per_nt*self.num_nt, normalizeAxis=True )
+            # orientation = rot.dot(orientation)
+        else:
+            orientation = orientation                            
+        """
+        key = seq
+        nt_dict = canonicalNtFwd if is_fwd else canonicalNtRev
+
+        atoms = nt_dict[ key ].generate() # TODO: clone?
+        atoms.orientation = orientation.dot(atoms.orientation)
+        if isinstance(self, SingleStrandedSegment):
+            if scale is not None and scale != 1:
+                for a in atoms:
+                    a.position = scale*a.position
+            atoms.position = pos - atoms.atoms_by_name["C1'"].collapsedPosition()
+        else:
+            if scale is not None and scale != 1:
+                if atoms.sequence in ("A","G"):
+                    r0 = atoms.atoms_by_name["N9"].position
+                else:
+                    r0 = atoms.atoms_by_name["N1"].position
+                for a in atoms:
+                    if a.name[-1] in ("'","P","T"):
+                        a.position = scale*(a.position-r0) + r0
+                    else:
+                        a.fixed = 1
+            atoms.position = pos
+        
+        atoms.contour_position = contour_position
+        strand_segment.add(atoms)
+
+        for callback in self._generate_nucleotide_callbacks:
+            callback(atoms)
+
+        return atoms
+
+    def add_location(self, nt, type_, on_fwd_strand=True):
+        ## Create location if needed, add to segment
+        c = self.nt_pos_to_contour(nt)
+        assert(c >= 0 and c <= 1)
+        # TODO? loc = self.Location( address=c, type_=type_, on_fwd_strand=is_fwd )
+        loc = Location( self, address=c, type_=type_, on_fwd_strand=on_fwd_strand )
+        self.locations.append(loc)
+
+    ## TODO? Replace with abstract strand-based model?
+
+    def add_nick(self, nt, on_fwd_strand=True):
+        self.add_3prime(nt,on_fwd_strand)
+        self.add_5prime(nt+1,on_fwd_strand)
+
+    def add_5prime(self, nt, on_fwd_strand=True):
+        if isinstance(self,SingleStrandedSegment):
+            on_fwd_strand = True
+        self.add_location(nt,"5prime",on_fwd_strand)
+
+    def add_3prime(self, nt, on_fwd_strand=True):
+        if isinstance(self,SingleStrandedSegment):
+            on_fwd_strand = True
+        self.add_location(nt,"3prime",on_fwd_strand)
+
+    def get_3prime_locations(self):
+        return sorted(self.get_locations("3prime"),key=lambda x: x.address)
+    
+    def get_5prime_locations(self):
+        ## TODO? ensure that data is consistent before _build_model calls
+        return sorted(self.get_locations("5prime"),key=lambda x: x.address)
+
+    def iterate_connections_and_locations(self, reverse=False):
+        ## connections to other segments
+        cl = self.get_contour_sorted_connections_and_locations()
+        if reverse:
+            cl = cl[::-1]
+            
+        for c in cl:
+            yield c
+
+    ## TODO rename
+    def _add_strand_piece(self, strand_piece):
+        """ Registers a strand segment within this object """
+
+        ## TODO use weakref
+        d = 'fwd' if strand_piece.is_fwd else 'rev'
+
+        ## Validate strand_piece (ensure no clashes)
+        for s in self.strand_pieces[d]:
+            l,h = sorted((s.start,s.end))
+            for value in (strand_piece.start,strand_piece.end):
+                assert( value < l or value > h )
+
+        ## Add strand_piece in correct order
+        self.strand_pieces[d].append(strand_piece)
+        self.strand_pieces[d] = sorted(self.strand_pieces[d],
+                                       key = lambda x: x.start)
+
+    ## TODO rename
+    def get_strand_segment(self, nt_pos, is_fwd, move_at_least=0.5):
+        """ Walks through locations, checking for crossovers """
+        # if self.name in ("6-1","1-1"):
+        #     import pdb
+        #     pdb.set_trace()
+        move_at_least = 0
+
+        ## Iterate through locations
+        # locations = sorted(self.locations, key=lambda l:(l.address,not l.on_fwd_strand), reverse=(not is_fwd))
+        def loc_rank(l):
+            nt = l.get_nt_pos()
+            ## optionally add logic about type of connection
+            return (nt, not l.on_fwd_strand)
+        # locations = sorted(self.locations, key=lambda l:(l.address,not l.on_fwd_strand), reverse=(not is_fwd))
+        locations = sorted(self.locations, key=loc_rank, reverse=(not is_fwd))
+        # print(locations)
+
+        for l in locations:
+            # TODOTODO probably okay
+            if l.address == 0:
+                pos = 0.0
+            elif l.address == 1:
+                pos = self.num_nt-1
+            else:
+                pos = self.contour_to_nt_pos(l.address, round_nt=True)
+
+            ## DEBUG
+
+
+            ## Skip locations encountered before our strand
+            # tol = 0.1
+            # if is_fwd:
+            #     if pos-nt_pos <= tol: continue 
+            # elif   nt_pos-pos <= tol: continue
+            if (pos-nt_pos)*(2*is_fwd-1) < move_at_least: continue
+            ## TODO: remove move_at_least
+            if np.isclose(pos,nt_pos):
+                if l.is_3prime_side_of_connection: continue
+
+            ## Stop if we found the 3prime end
+            if l.on_fwd_strand == is_fwd and l.type_ == "3prime" and l.connection is None:
+                # print("  found end at",l)
+                return pos, None, None, None, None
+
+            ## Check location connections
+            c = l.connection
+            if c is None: continue
+            B = c.other(l)            
+
+            ## Found a location on the same strand?
+            if l.on_fwd_strand == is_fwd:
+                # print("  passing through",l)
+                # print("from {}, connection {} to {}".format(nt_pos,l,B))
+                Bpos = B.get_nt_pos()
+                return pos, B.container, Bpos, B.on_fwd_strand, 0.5
+                
+            ## Stop at other strand crossovers so basepairs line up
+            elif c.type_ == "crossover":
+                if nt_pos == pos: continue
+                # print("  pausing at",l)
+                return pos, l.container, pos+(2*is_fwd-1), is_fwd, 0
+
+        raise Exception("Shouldn't be here")
+        # print("Shouldn't be here")
+        ## Made it to the end of the segment without finding a connection
+        return 1*is_fwd, None, None, None
+
+    def get_nearest_bead(self, contour_position):
+        if len(self.beads) < 1: return None
+        cs = np.array([b.contour_position for b in self.beads]) # TODO: cache
+        # TODO: include beads in connections?
+        i = np.argmin((cs - contour_position)**2)
+
+        return self.beads[i]
+
+    def _get_atomic_nucleotide(self, nucleotide_idx, is_fwd=True):
+        d = 'fwd' if is_fwd else 'rev'
+        for s in self.strand_pieces[d]:
+            try:
+                return s.get_nucleotide(nucleotide_idx)
+            except:
+                pass
+        raise Exception("Could not find nucleotide in {} at {}.{}".format( self, nucleotide_idx, d ))
+
+    def get_all_consecutive_beads(self, number):
+        assert(number >= 1)
+        ## Assume that consecutive beads in self.beads are bonded
+        ret = []
+        for i in range(len(self.beads)-number+1):
+            tmp = [self.beads[i+j] for j in range(0,number)]
+            ret.append( tmp )
+        return ret   
+
+    def _add_bead(self,b):
+        
+        # assert(b.parent is None)
+        if b.parent is not None:
+            b.parent.children.remove(b)
+        self.add(b)
+        self.beads.append(b) # don't add orientation bead
+        if "orientation_bead" in b.__dict__: # TODO: think of a cleaner approach
+            o = b.orientation_bead
+            o.contour_position = b.contour_position
+            if o.parent is not None:
+                o.parent.children.remove(o)
+            self.add(o)
+            self.add_bond(b,o, Segment.orientation_bond, exclude=True)
+
+    def _rebuild_children(self, new_children):
+        # print("_rebuild_children on %s" % self.name)
+        old_children = self.children
+        old_beads = self.beads
+        self.children = []
+        self.beads = []
+
+        if True:
+            ## TODO: remove this if duplicates are never found 
+            # print("Searching for duplicate particles...")
+            ## Remove duplicates, preserving order
+            tmp = []
+            for c in new_children:
+                if c not in tmp:
+                    tmp.append(c)
+                else:
+                    print("  DUPLICATE PARTICLE FOUND!")
+            new_children = tmp
+
+        for b in new_children:
+            self.beads.append(b)
+            self.children.append(b)
+            if "orientation_bead" in b.__dict__: # TODO: think of a cleaner approach
+                self.children.append(b.orientation_bead)
+            
+        # tmp = [c for c in self.children if c not in old_children]
+        # assert(len(tmp) == 0)
+        # tmp = [c for c in old_children if c not in self.children]
+        # assert(len(tmp) == 0)
+        assert(len(old_children) == len(self.children))
+        assert(len(old_beads) == len(self.beads))
+
+
+    def _generate_beads(self, bead_model, max_basepairs_per_bead, max_nucleotides_per_bead):
+
+        """ Generate beads (positions, types, etc) and bonds, angles, dihedrals, exclusions """
+        ## TODO: decide whether to remove bead_model argument
+        ##       (currently unused)
+
+        ## First find points between-which beads must be generated
+        # conn_locs = self.get_contour_sorted_connections_and_locations()
+        # locs = [A for c,A,B in conn_locs]
+        # existing_beads = [l.particle for l in locs if l.particle is not None]
+        # if self.name == "S001":
+        #     pdb.set_trace()
+
+        # pdb.set_trace()
+        existing_beads0 = { (l.particle, l.particle.get_contour_position(self,l.address))
+                            for l in self.locations if l.particle is not None }
+        existing_beads = sorted( list(existing_beads0), key=lambda bc: bc[1] )
+
+        # if self.num_nt == 1 and all([l.particle is not None for l in self.locations]):
+        #     pdb.set_trace()
+        #     return
+
+        for b,c in existing_beads:
+            assert(b.parent is not None)
+
+        ## Add ends if they don't exist yet
+        ## TODOTODO: test 1 nt segments?
+        if len(existing_beads) == 0 or existing_beads[0][0].get_nt_position(self,0) >= 0.5:
+            # if len(existing_beads) > 0:            
+            #     assert(existing_beads[0].get_nt_position(self) >= 0.5)
+            b = self._generate_one_bead( self.nt_pos_to_contour(0), 0)
+            existing_beads = (b,0) + existing_beads
+
+        if existing_beads[-1][0].get_nt_position(self,1)-(self.num_nt-1) < -0.5 or len(existing_beads)==1:
+            b = self._generate_one_bead( self.nt_pos_to_contour(self.num_nt-1), 0)
+            existing_beads.append( (b,1) )
+        assert(len(existing_beads) > 1)
+
+        ## Walk through existing_beads, add beads between
+        tmp_children = []       # build list of children in nice order
+        last = None
+
+        for I in range(len(existing_beads)-1):
+            eb1,eb2 = [existing_beads[i][0] for i in (I,I+1)]
+            ec1,ec2 = [existing_beads[i][1] for i in (I,I+1)]
+            assert( (eb1,ec1) is not (eb2,ec2) )
+
+            # if np.isclose(eb1.position[2], eb2.position[2]):
+            #     import pdb
+            #     pdb.set_trace()
+
+            # print(" %s working on %d to %d" % (self.name, eb1.position[2], eb2.position[2]))
+            e_ds = ec2-ec1
+            num_beads = self._get_num_beads( e_ds, max_basepairs_per_bead, max_nucleotides_per_bead )
+
+            ## Ensure there is a ssDNA bead between dsDNA beads
+            if num_beads == 0 and isinstance(self,SingleStrandedSegment) and isinstance(eb1.parent,DoubleStrandedSegment) and isinstance(eb2.parent,DoubleStrandedSegment):
+                num_beads = 1
+            ## TODO similarly ensure there is a dsDNA bead between ssDNA beads
+
+            ds = e_ds / (num_beads+1)
+            nts = ds*self.num_nt
+            eb1.num_nt += 0.5*nts
+            eb2.num_nt += 0.5*nts
+
+            ## Add beads
+            if eb1.parent == self:
+                tmp_children.append(eb1)
+
+            s0 = ec1
+            if last is not None:
+                last.make_intrahelical_neighbor(eb1)
+            last = eb1
+            for j in range(num_beads):
+                s = ds*(j+1) + s0
+                # if self.name in ("51-2","51-3"):
+                # if self.name in ("31-2",):
+                #     print(" adding bead at {}".format(s))
+                b = self._generate_one_bead(s,nts)
+
+                last.make_intrahelical_neighbor(b)
+                last = b
+                tmp_children.append(b)
+
+        last.make_intrahelical_neighbor(eb2)
+
+        if eb2.parent == self:
+            tmp_children.append(eb2)
+        # if self.name in ("31-2",):
+        #     pdb.set_trace()
+        self._rebuild_children(tmp_children)
+
+        for callback in self._generate_bead_callbacks:
+            callback(self)
+
+    def _regenerate_beads(self, max_nts_per_bead=4, ):
+        ...
+    
+
+class DoubleStrandedSegment(Segment):
+
+    """ Class that describes a segment of ssDNA. When built from
+    cadnano models, should not span helices """
+
+    def __init__(self, name, num_bp, start_position = np.array((0,0,0)),
+                 end_position = None, 
+                 segment_model = None,
+                 local_twist = False,
+                 num_turns = None,
+                 start_orientation = None,
+                 twist_persistence_length = 90,
+                 **kwargs):
+        
+        self.helical_rise = 10.44
+        self.distance_per_nt = 3.4
+        Segment.__init__(self, name, num_bp,
+                         start_position,
+                         end_position, 
+                         segment_model,
+                         **kwargs)
+        self.num_bp = self.num_nt
+
+        self.local_twist = local_twist
+        if num_turns is None:
+            num_turns = float(num_bp) / self.helical_rise
+        self.twist_per_nt = float(360 * num_turns) / num_bp
+
+        if start_orientation is None:
+            start_orientation = np.eye(3) # np.array(((1,0,0),(0,1,0),(0,0,1)))
+        self.start_orientation = start_orientation
+        self.twist_persistence_length = twist_persistence_length
+
+        self.nicks = []
+
+        self.start = self.start5 = Location( self, address=0, type_= "end5" )
+        self.start3 = Location( self, address=0, type_ = "end3", on_fwd_strand=False )
+
+        self.end = self.end3 = Location( self, address=1, type_ = "end3" )
+        self.end5 = Location( self, address=1, type_= "end5", on_fwd_strand=False )
+        # for l in (self.start5,self.start3,self.end3,self.end5):
+        #     self.locations.append(l)
+
+        ## TODO: initialize sensible spline for orientation
+
+    ## Convenience methods
+    ## TODO: add errors if unrealistic connections are made
+    ## TODO: make connections automatically between unconnected strands
+    def connect_start5(self, end3, type_="intrahelical", force_connection=False):
+        if isinstance(end3, SingleStrandedSegment):
+            end3 = end3.end3
+        self._connect_ends( self.start5, end3, type_, force_connection = force_connection )
+    def connect_start3(self, end5, type_="intrahelical", force_connection=False):
+        if isinstance(end5, SingleStrandedSegment):
+            end5 = end5.start5
+        self._connect_ends( self.start3, end5, type_, force_connection = force_connection )
+    def connect_end3(self, end5, type_="intrahelical", force_connection=False):
+        if isinstance(end5, SingleStrandedSegment):
+            end5 = end5.start5
+        self._connect_ends( self.end3, end5, type_, force_connection = force_connection )
+    def connect_end5(self, end3, type_="intrahelical", force_connection=False):
+        if isinstance(end3, SingleStrandedSegment):
+            end3 = end3.end3
+        self._connect_ends( self.end5, end3, type_, force_connection = force_connection )
+
+    def add_crossover(self, nt, other, other_nt, strands_fwd=(True,False), nt_on_5prime=True, type_="crossover"):
+        """ Add a crossover between two helices """
+        ## Validate other, nt, other_nt
+        ##   TODO
+
+        if isinstance(other,SingleStrandedSegment):
+            other.add_crossover(other_nt, self, nt, strands_fwd[::-1], not nt_on_5prime)
+        else:
+
+            ## Create locations, connections and add to segments
+            c = self.nt_pos_to_contour(nt)
+            assert(c >= 0 and c <= 1)
+
+            loc = self.get_location_at(c, strands_fwd[0])
+
+            c = other.nt_pos_to_contour(other_nt)
+            # TODOTODO: may need to subtract or add a little depending on 3prime/5prime
+            assert(c >= 0 and c <= 1)
+            other_loc = other.get_location_at(c, strands_fwd[1])
+            self._connect(other, Connection( loc, other_loc, type_=type_ ))
+            if nt_on_5prime:
+                loc.is_3prime_side_of_connection = False
+                other_loc.is_3prime_side_of_connection = True
+            else:            
+                loc.is_3prime_side_of_connection = True
+                other_loc.is_3prime_side_of_connection = False
+
+    ## Real work
+    def _connect_ends(self, end1, end2, type_, force_connection):
+        debug = False
+        ## TODO remove self?
+        ## validate the input
+        for end in (end1, end2):
+            assert( isinstance(end, Location) )
+            assert( end.type_ in ("end3","end5") )
+        assert( end1.type_ != end2.type_ )
+
+        ## Remove other connections involving these points
+        if end1.connection is not None:
+            if debug: print("WARNING: reconnecting {}".format(end1))
+            end1.connection.delete()
+        if end2.connection is not None:
+            if debug: print("WARNING: reconnecting {}".format(end2))
+            end2.connection.delete()
+
+        ## Create and add connection
+        if end2.type_ == "end5":
+            end1.container._connect( end2.container, Connection( end1, end2, type_=type_ ), in_3prime_direction=True )
+        else:
+            end2.container._connect( end1.container, Connection( end2, end1, type_=type_ ), in_3prime_direction=True )
+    def _get_num_beads(self, contour, max_basepairs_per_bead, max_nucleotides_per_bead):
+        # return int(contour*self.num_nt // max_basepairs_per_bead)
+        return int(contour*(self.num_nt**2/(self.num_nt+1)) // max_basepairs_per_bead)
+
+    def _generate_one_bead(self, contour_position, nts):
+        pos = self.contour_to_position(contour_position)
+        if self.local_twist:
+            orientation = self.contour_to_orientation(contour_position)
+            if orientation is None:
+                print("WARNING: local_twist is True, but orientation is None; using identity")
+                orientation = np.eye(3)
+            opos = pos + orientation.dot( np.array((Segment.orientation_bond.r0,0,0)) )
+            # if np.linalg.norm(pos) > 1e3:
+            #     pdb.set_trace()
+            assert(np.linalg.norm(opos-pos) < 10 )
+            o = SegmentParticle( Segment.orientation_particle, opos, name="O",
+                                 contour_position = contour_position,
+                                 num_nt=nts, parent=self )
+            bead = SegmentParticle( Segment.dsDNA_particle, pos, name="DNA",
+                                    num_nt=nts, parent=self, 
+                                    orientation_bead=o,
+                                    contour_position=contour_position )
+
+        else:
+            bead = SegmentParticle( Segment.dsDNA_particle, pos, name="DNA",
+                                    num_nt=nts, parent=self,
+                                    contour_position=contour_position )
+        self._add_bead(bead)
+        return bead
+
+class SingleStrandedSegment(Segment):
+
+    """ Class that describes a segment of ssDNA. When built from
+    cadnano models, should not span helices """
+
+    def __init__(self, name, num_nt, start_position = None,
+                 end_position = None, 
+                 segment_model = None,
+                 **kwargs):
+
+        if start_position is None: start_position = np.array((0,0,0))
+        self.distance_per_nt = 5
+        Segment.__init__(self, name, num_nt, 
+                         start_position,
+                         end_position, 
+                         segment_model,
+                         **kwargs)
+
+        self.start = self.start5 = Location( self, address=0, type_= "end5" ) # TODO change type_?
+        self.end = self.end3 = Location( self, address=1, type_ = "end3" )
+        # for l in (self.start5,self.end3):
+        #     self.locations.append(l)
+
+    def connect_end3(self, end5, force_connection=False):
+        self._connect_end( end5,  _5_to_3 = True, force_connection = force_connection )
+
+    def connect_start5(self, end3, force_connection=False):
+        self._connect_end( end3,  _5_to_3 = False, force_connection = force_connection )
+
+    def connect_5end(self, end3, force_connection=False): # TODO: change name or possibly deprecate
+        print("WARNING: 'connect_5end' will be deprecated")
+        return self.connect_start5( end3, force_connection=False)
+
+    def _connect_end(self, other, _5_to_3, force_connection):
+        assert( isinstance(other, Location) )
+        if _5_to_3 == True:
+            seg1 = self
+            seg2 = other.container
+            end1 = self.end3
+            end2 = other
+            assert(other.type_ != "end3")
+            # if (other.type_ is not "end5"):
+            #     print("WARNING: code does not prevent connecting 3prime to 3prime, etc")
+        else:
+            seg1 = other.container
+            seg2 = self
+            end1 = other
+            end2 = self.start
+            assert(other.type_ != "end5")
+            # if (other.type_ is not "end3"):
+            #     print("WARNING: code does not prevent connecting 3prime to 3prime, etc")
+
+        ## Remove other connections involving these points
+        if end1.connection is not None:
+            print("WARNING: reconnecting {}".format(end1))
+            end1.connection.delete()
+        if end2.connection is not None:
+            print("WARNING: reconnecting {}".format(end2))
+            end2.connection.delete()
+
+        conn = Connection( end1, end2, type_="intrahelical" )
+        seg1._connect( seg2, conn, in_3prime_direction=True )
+
+
+    def add_crossover(self, nt, other, other_nt, strands_fwd=(True,False), nt_on_5prime=True, type_='sscrossover'):
+        """ Add a crossover between two helices """
+        ## TODO Validate other, nt, other_nt
+
+        assert(nt < self.num_nt)
+        assert(other_nt < other.num_nt)
+        if nt in (0,1,self.num_nt-1) and other_nt in (0,1,other.num_nt-1):
+            if nt_on_5prime == True:
+                other_end = other.start5 if strands_fwd[1] else other.end5
+                self.connect_end3( other_end )
+            else:
+                other_end = other.end3 if strands_fwd[1] else other.start3
+                self.connect_start5( other_end )
+            return
+
+        # c1 = self.nt_pos_to_contour(nt)
+        # # TODOTODO
+        # ## Ensure connections occur at ends, otherwise the structure doesn't make sense
+        # # assert(np.isclose(c1,0) or np.isclose(c1,1))
+        # assert(np.isclose(nt,0) or np.isclose(nt,self.num_nt-1))
+        if nt == 0 and (self.num_nt > 1 or not nt_on_5prime):
+            c1 = 0
+        elif nt == self.num_nt-1:
+            c1 = 1
+        else:
+            raise Exception("Crossovers can only be at the ends of an ssDNA segment")
+        loc = self.get_location_at(c1, True)
+
+        if other_nt == 0:
+            c2 = 0
+        elif other_nt == other.num_nt-1:
+            c2 = 1
+        else:
+            c2 = other.nt_pos_to_contour(other_nt)
+
+        if isinstance(other,SingleStrandedSegment):
+            ## Ensure connections occur at opposing ends
+            assert(np.isclose(other_nt,0) or np.isclose(other_nt,self.num_nt-1))
+            other_loc = other.get_location_at( c2, True )
+            # if ("22-2" in (self.name, other.name)):
+            #     pdb.set_trace()
+            if nt_on_5prime:
+                self.connect_end3( other_loc )
+            else:
+                other.connect_end3( self )
+
+        else:
+            assert(c2 >= 0 and c2 <= 1)
+            other_loc = other.get_location_at( c2, strands_fwd[1] )
+            if nt_on_5prime:
+                self._connect(other, Connection( loc, other_loc, type_="sscrossover" ), in_3prime_direction=True )
+            else:
+                other._connect(self, Connection( other_loc, loc, type_="sscrossover" ), in_3prime_direction=True )
+
+    def _get_num_beads(self, contour, max_basepairs_per_bead, max_nucleotides_per_bead):
+        return int(contour*(self.num_nt**2/(self.num_nt+1)) // max_basepairs_per_bead)
+        # return int(contour*self.num_nt // max_nucleotides_per_bead)
+
+    def _generate_one_bead(self, contour_position, nts):
+        pos = self.contour_to_position(contour_position)
+        b = SegmentParticle( Segment.ssDNA_particle, pos, 
+                             name="NAS",
+                             num_nt=nts, parent=self,
+                             contour_position=contour_position )
+        self._add_bead(b)
+        return b
+    
+class StrandInSegment(Group):
+    """ Represents a piece of an ssDNA strand within a segment """
+    
+    def __init__(self, segment, start, end, is_fwd):
+        """ start/end should be provided expressed in nt coordinates, is_fwd tuples """
+        Group.__init__(self)
+        self.num_nt = 0
+        # self.sequence = []
+        self.segment = segment
+        self.start = start
+        self.end = end
+        self.is_fwd = is_fwd
+
+        nts = np.abs(end-start)+1
+        self.num_nt = int(round(nts))
+        assert( np.isclose(self.num_nt,nts) )
+        segment._add_strand_piece(self)
+    
+    def _nucleotide_ids(self):
+        nt0 = self.start # seg.contour_to_nt_pos(self.start)
+        assert( np.abs(nt0 - round(nt0)) < 1e-5 )
+        nt0 = int(round(nt0))
+        assert( (self.end-self.start) >= 0 or not self.is_fwd )
+
+        direction = (2*self.is_fwd-1)
+        return range(nt0,nt0 + direction*self.num_nt, direction)
+
+    def get_sequence(self):
+        """ return 5-to-3 """
+        # TODOTODO test
+        seg = self.segment
+        if self.is_fwd:
+            return [seg.sequence[nt] for nt in self._nucleotide_ids()]
+        else:
+            return [seqComplement[seg.sequence[nt]] for nt in self._nucleotide_ids()]
+    
+    def get_contour_points(self):
+        c0,c1 = [self.segment.nt_pos_to_contour(p) for p in (self.start,self.end)]
+        return np.linspace(c0,c1,self.num_nt)
+
+    def get_nucleotide(self, idx):
+        """ idx expressed as nt coordinate within segment """
+
+        lo,hi = sorted((self.start,self.end))
+        if self.is_fwd:
+            idx_in_strand = idx - lo
+        else:
+            idx_in_strand = hi - idx
+        assert( np.isclose( idx_in_strand , int(round(idx_in_strand)) ) )
+        assert(idx_in_strand >= 0)
+        return self.children[int(round(idx_in_strand))]
+    def __repr__(self):
+        return "<StrandInSegment {}{}[{:.2f}-{:.2f},{:d}]>".format( self.parent.segname, self.segment.name, self.start, self.end, self.is_fwd)
+
+            
+class Strand(Group):
+    """ Represents an entire ssDNA strand from 5' to 3' as it routes through segments """
+    def __init__(self, segname = None, is_circular = False):
+        Group.__init__(self)
+        self.num_nt = 0
+        self.children = self.strand_segments = []
+        self.segname = segname
+        self.is_circular = is_circular
+        self.debug = False
+
+    def __repr__(self):
+        return "<Strand {}({})>".format( self.segname, self.num_nt )
+
+    ## TODO disambiguate names of functions
+    def add_dna(self, segment, start, end, is_fwd):
+        """ start/end are given as nt """
+        if np.abs(start-end) <= 0.9:
+            if self.debug:
+                print( "WARNING: segment constructed with a very small number of nts ({})".format(np.abs(start-end)) )
+            # import pdb
+            # pdb.set_trace()
+        for s in self.strand_segments:
+            if s.segment == segment and s.is_fwd == is_fwd:
+                # assert( s.start not in (start,end) )
+                # assert( s.end not in (start,end) )
+                if s.start in (start,end) or s.end in (start,end):
+                    raise CircularDnaError("Found circular DNA")
+
+        s = StrandInSegment( segment, start, end, is_fwd )
+        self.add( s )
+        self.num_nt += s.num_nt
+
+    def set_sequence(self,sequence): # , set_complement=True):
+        ## validate input
+        assert( len(sequence) >= self.num_nt )
+        assert( np.all( [i in ('A','T','C','G') for i in sequence] ) )
+        
+        seq_idx = 0
+        ## set sequence on each segment
+        for s in self.children:
+            seg = s.segment
+            if seg.sequence is None:
+                seg.sequence = [None for i in range(seg.num_nt)]
+
+            if s.is_fwd:
+                for nt in s._nucleotide_ids():
+                    seg.sequence[nt] = sequence[seq_idx]
+                    seq_idx += 1
+            else:
+                for nt in s._nucleotide_ids():
+                    seg.sequence[nt] = seqComplement[sequence[seq_idx]]
+                    seq_idx += 1
+
+    # def get_sequence(self):
+    #     sequence = []
+    #     for ss in self.strand_segments:
+    #         sequence.extend( ss.get_sequence() )
+
+    #     assert( len(sequence) >= self.num_nt )
+    #     ret = ["5"+sequence[0]] +\
+    #           sequence[1:-1] +\
+    #           [sequence[-1]+"3"]
+    #     assert( len(ret) == self.num_nt )
+    #     return ret
+
+    def link_nucleotides(self, nt5, nt3):
+        parent = nt5.parent if nt5.parent is nt3.parent else self
+        o3,c3,c4,c2,h3 = [nt5.atoms_by_name[n]
+                          for n in ("O3'","C3'","C4'","C2'","H3'")]
+        p,o5,o1,o2,c5 = [nt3.atoms_by_name[n]
+                         for n in ("P","O5'","O1P","O2P","C5'")]
+        parent.add_bond( o3, p, None )
+        parent.add_angle( c3, o3, p, None )
+        for x in (o5,o1,o2):
+            parent.add_angle( o3, p, x, None )
+            parent.add_dihedral(c3, o3, p, x, None )
+        for x in (c4,c2,h3):
+            parent.add_dihedral(x, c3, o3, p, None )
+        parent.add_dihedral(o3, p, o5, c5, None)
+
+    def generate_atomic_model(self, scale, first_atomic_index):
+        last = None
+        resid = 1
+        ## TODO relabel "strand_segment"
+        strand_segment_count = 0
+        for s in self.strand_segments:
+            strand_segment_count += 1
+            seg = s.segment
+            contour = s.get_contour_points()
+            # if s.end == s.start:
+            #     pdb.set_trace()
+            # assert(s.end != s.start)
+            assert( s.num_nt == 1 or (np.linalg.norm( seg.contour_to_position(contour[-1]) - seg.contour_to_position(contour[0]) ) > 0.1) )
+            nucleotide_count = 0
+            for c,seq in zip(contour,s.get_sequence()):
+                nucleotide_count += 1
+                if last is None and not self.is_circular:
+                    seq = "5"+seq
+                if strand_segment_count == len(s.strand_segments) and nucleotide_count == s.num_nt and not self.is_circular:
+                    seq = seq+"3"
+
+                nt = seg._generate_atomic_nucleotide( c, s.is_fwd, seq, scale, s )
+
+                ## Join last basepairs
+                if last is not None:
+                    self.link_nucleotides(last,nt)
+
+                nt.__dict__['resid'] = resid
+                resid += 1
+                last = nt
+                nt._first_atomic_index = first_atomic_index
+                first_atomic_index += len(nt.children)
+
+        if self.is_circular:
+            self.link_nucleotides(last,self.strand_segments[0].children[0])
+
+        return first_atomic_index
+
+    def update_atomic_orientations(self,default_orientation):
+        last = None
+        resid = 1
+        for s in self.strand_segments:
+            seg = s.segment
+            contour = s.get_contour_points()
+            for c,seq,nt in zip(contour,s.get_sequence(),s.children):
+
+                orientation = seg.contour_to_orientation(c)
+                ## TODO: move this code (?)
+                if orientation is None:
+                    axis = seg.contour_to_tangent(c)
+                    angleVec = np.array([1,0,0])
+                    if axis.dot(angleVec) > 0.9: angleVec = np.array([0,1,0])
+                    angleVec = angleVec - angleVec.dot(axis)*axis
+                    angleVec = angleVec/np.linalg.norm(angleVec)
+                    y = np.cross(axis,angleVec)
+                    orientation = np.array([angleVec,y,axis]).T
+
+                nt.orientation = orientation.dot(default_orientation) # this one should be correct
+
+class SegmentModel(ArbdModel):
+    def __init__(self, segments=[], local_twist=True, escapable_twist=True,
+                 max_basepairs_per_bead=7,
+                 max_nucleotides_per_bead=4,
+                 dimensions=(1000,1000,1000), temperature=291,
+                 timestep=50e-6, cutoff=50, 
+                 decompPeriod=10000, pairlistDistance=None, 
+                 nonbondedResolution=0,DEBUG=0):
+        self.DEBUG = DEBUG
+        if DEBUG > 0: print("Building ARBD Model")
+        ArbdModel.__init__(self,segments,
+                           dimensions, temperature, timestep, cutoff, 
+                           decompPeriod, pairlistDistance=None,
+                           nonbondedResolution=0)
+
+        # self.max_basepairs_per_bead = max_basepairs_per_bead     # dsDNA
+        # self.max_nucleotides_per_bead = max_nucleotides_per_bead # ssDNA
+        self.children = self.segments = segments
+
+        self._bonded_potential = dict() # cache for bonded potentials
+        self._generate_strands()
+        self.grid_potentials = []
+        self._generate_bead_model( max_basepairs_per_bead, max_nucleotides_per_bead, local_twist, escapable_twist)
+
+        self.useNonbondedScheme( nbDnaScheme )
+        self.useTclForces = False
+
+    def get_connections(self,type_=None,exclude=()):
+        """ Find all connections in model, without double-counting """
+        added=set()
+        ret=[]
+        for s in self.segments:
+            items = [e for e in s.get_connections_and_locations(type_,exclude=exclude) if e[0] not in added]
+            added.update([e[0] for e in items])
+            ret.extend( list(sorted(items,key=lambda x: x[1].address)) )
+        return ret
+    
+    def _recursively_get_beads_within_bonds(self,b1,bonds,done=()):
+        ret = []
+        done = list(done)
+        done.append(b1)
+        if bonds == 0:
+            return [[]]
+
+        for b2 in b1.intrahelical_neighbors:
+            if b2 in done: continue
+            for tmp in self._recursively_get_beads_within_bonds(b2, bonds-1, done):
+                ret.append( [b2]+tmp )
+        return ret
+
+    def _get_intrahelical_beads(self,num=2):
+        ## TODO: add check that this is not called before adding intrahelical_neighbors in _generate_bead_model
+
+        assert(num >= 2)
+
+        ret = []
+        for s in self.segments:
+            for b1 in s.beads:
+                for bead_list in self._recursively_get_beads_within_bonds(b1, num-1):
+                    assert(len(bead_list) == num-1)
+                    if b1.idx < bead_list[-1].idx: # avoid double-counting
+                        ret.append([b1]+bead_list)
+        return ret
+
+
+    def _get_intrahelical_angle_beads(self):
+        return self._get_intrahelical_beads(num=3)
+
+    def _get_potential(self, type_, kSpring, d, max_potential = None):
+        key = (type_, kSpring, d, max_potential)
+        if key not in self._bonded_potential:
+            assert( kSpring >= 0 )
+            if type_ == "bond":
+                self._bonded_potential[key] = HarmonicBond(kSpring,d, rRange=(0,1200), max_potential=max_potential)
+            elif type_ == "angle":
+                self._bonded_potential[key] = HarmonicAngle(kSpring,d, max_potential=max_potential)
+                # , resolution = 1, maxForce=0.1)
+            elif type_ == "dihedral":
+                self._bonded_potential[key] = HarmonicDihedral(kSpring,d, max_potential=max_potential)
+            else:
+                raise Exception("Unhandled potential type '%s'" % type_)
+        return self._bonded_potential[key]
+    def get_bond_potential(self, kSpring, d):
+        assert( d > 0.2 )
+        return self._get_potential("bond", kSpring, d)
+    def get_angle_potential(self, kSpring, d):
+        return self._get_potential("angle", kSpring, d)
+    def get_dihedral_potential(self, kSpring, d, max_potential=None):
+        while d > 180: d-=360
+        while d < -180: d+=360
+        return self._get_potential("dihedral", kSpring, d, max_potential)
+
+
+    def _getParent(self, *beads ):
+        if np.all( [b1.parent == b2.parent 
+                    for b1,b2 in zip(beads[:-1],beads[1:])] ):
+            return beads[0].parent
+        else:
+            return self
+
+    def _get_twist_spring_constant(self, sep):
+        """ sep in nt """
+        kT = 0.58622522         # kcal/mol
+        twist_persistence_length = 90  # set semi-arbitrarily as there is a large spread in literature
+        ## <cos(q)> = exp(-s/Lp) = integrate( cos[x] exp(-A x^2), {x, 0, pi} ) / integrate( exp(-A x^2), {x, 0, pi} )
+        ##   Assume A is small
+        ## int[B_] :=  Normal[Integrate[ Series[Cos[x] Exp[-B x^2], {B, 0, 1}], {x, 0, \[Pi]}]/
+        ##             Integrate[Series[Exp[-B x^2], {B, 0, 1}], {x, 0, \[Pi]}]]
+
+        ## Actually, without assumptions I get fitFun below
+        ## From http://www.annualreviews.org/doi/pdf/10.1146/annurev.bb.17.060188.001405
+        ##   units "3e-19 erg cm/ 295 k K" "nm" =~ 73
+        Lp = twist_persistence_length/0.34 
+
+        fitFun = lambda x: np.real(erf( (4*np.pi*x + 1j)/(2*np.sqrt(x)) )) * np.exp(-1/(4*x)) / erf(2*np.sqrt(x)*np.pi) - np.exp(-sep/Lp)
+        k = opt.leastsq( fitFun, x0=np.exp(-sep/Lp) )
+        return k[0][0] * 2*kT*0.00030461742
+
+    def extend(self, other, copy=True, include_strands=False):
+        assert( isinstance(other, SegmentModel) )
+        if copy:
+            for s in other.segments:
+                self.segments.append(deepcopy(s))
+            if include_strands:
+                for s in other.strands:
+                    self.strands.append(deepcopy(s))
+        else:
+            for s in other.segments:
+                self.segments.append(s)
+            if include_strands:
+                for s in other.strands:
+                    self.strands.append(s)
+        self._clear_beads()
+
+    def update(self, segment , copy=False):
+        assert( isinstance(segment, Segment) )
+        if copy:
+            segment = deepcopy(segment)
+        self.segments.append(segment)
+        self._clear_beads()
+
+    """ Mapping between different resolution models """
+    def clear_atomic(self):
+        for strand in self.strands:
+            for s in strand.children:
+                s.clear_all()
+        for seg in self.segments:
+            for d in ('fwd','rev'):
+                seg.strand_pieces[d] = []
+        self._generate_strands()
+        ## Clear sequence if needed
+        for seg in self.segments:
+            if seg.sequence is not None and len(seg.sequence) != seg.num_nt:
+                seg.sequence = None
+
+    def clear_beads(self):
+        return self._clear_beads()
+
+    def _clear_beads(self):
+        ## TODO: deprecate
+        for s in self.segments:
+            try:
+                s.clear_all()
+            except:
+                ...
+        self.clear_all(keep_children=True)
+
+        try:
+            if len(self.strands[0].children[0].children) > 0:
+                self.clear_atomic()
+        except:
+            ...
+
+        ## Check that it worked
+        assert( len([b for b in self]) == 0 )
+        locParticles = []
+        for s in self.segments:
+            for c,A,B in s.get_connections_and_locations():
+                for l in (A,B):
+                    if l.particle is not None:
+                        locParticles.append(l.particle)
+        assert( len(locParticles) == 0 )
+        assert( len([b for s in self.segments for b in s.beads]) == 0 )
+
+    def _update_segment_positions(self, bead_coordinates):
+        print("WARNING: called deprecated command '_update_segment_positions; use 'update_splines' instead")
+        return self.update_splines(bead_coordinates)
+
+    ## Operations on spline coordinates
+    def translate(self, translation_vector, position_filter=None):
+        for s in self.segments:
+            s.translate(translation_vector, position_filter=position_filter)
+        
+    def rotate(self, rotation_matrix, about=None, position_filter=None):
+        for s in self.segments:
+            s.rotate(rotation_matrix, about=about, position_filter=position_filter)
+
+    def get_center(self, include_ssdna=False):
+        if include_ssdna:
+            segments = self.segments
+        else:
+            segments = list(filter(lambda s: isinstance(s,DoubleStrandedSegment), 
+                                   self.segments))
+        centers = [s.get_center() for s in segments]
+        weights = [s.num_nt*2 if isinstance(s,DoubleStrandedSegment) else s.num_nt for s in segments]
+        # centers,weights = [np.array(a) for a in (centers,weights)]
+        return np.average( centers, axis=0, weights=weights)
+
+    def update_splines(self, bead_coordinates):
+        """ Set new function for each segments functions
+        contour_to_position and contour_to_orientation """
+
+        for s in self.segments:
+            # if s.name == "61-1":
+            #     pdb.set_trace()
+
+            cabs = s.get_connections_and_locations("intrahelical")
+            if isinstance(s,SingleStrandedSegment):
+                cabs = cabs + [[c,A,B] for c,A,B in s.get_connections_and_locations("sscrossover") if A.address == 0 or A.address == 1]
+            if np.any( [B.particle is None for c,A,B in cabs] ):
+                print( "WARNING: none type found in connection, skipping" )
+                cabs = [e for e in cabs if e[2].particle is not None]
+
+            def get_beads_and_contour_positions(s):
+                ret_list = []
+                def zip_bead_contour(beads,address=None):
+                    if isinstance(address,list):
+                        assert(False)
+                        for b,a in zip(beads,address):
+                            if b is None: continue
+                            try:
+                                ret_list.append((b, b.get_contour_position(s,a)))
+                            except:
+                                ...                                
+                    else:
+                        for b in beads:
+                            if b is None: continue
+                            try:
+                                ret_list.append((b, b.get_contour_position(s,address)))
+                            except:
+                                ...
+                    return ret_list
+                
+                ## Add beads from segment s
+                beads_contours = zip_bead_contour(s.beads)
+                beads_contours.extend( zip_bead_contour([A.particle for c,A,B in cabs]) )
+                beads = set([b for b,c in beads_contours])
+
+                ## Add nearby beads
+                for c,A,B in cabs:
+                    ## TODOTODO test?
+                    filter_fn = lambda x: x is not None and x not in beads
+                    bs = list( filter( filter_fn, B.particle.intrahelical_neighbors ) )
+                    beads_contours.extend( zip_bead_contour( bs, A.address ) )
+                    beads.update(bs)
+                    for i in range(3):
+                        bs = list( filter( filter_fn, [n for b in bs for n in b.intrahelical_neighbors] ) )
+                        beads_contours.extend( zip_bead_contour( bs, A.address ) )
+                        beads.update(bs)
+
+                beads_contours = list(set(beads_contours))
+                beads = list(beads)
+
+                ## Skip beads that are None (some locations were not assigned a particle to avoid double-counting) 
+                # beads = [b for b in beads if b is not None]
+                assert( np.any([b is None for b,c in beads_contours]) == False )
+                # beads = list(filter(lambda x: x[0] is not None, beads))
+
+                if isinstance(s, DoubleStrandedSegment):
+                    beads_contours = list(filter(lambda x: x[0].type_.name[0] == "D", beads_contours))
+                return beads_contours
+
+            beads_contours = get_beads_and_contour_positions(s)
+            contours = [c for b,c in beads_contours]
+            contours = np.array(contours, dtype=np.float16) # deliberately use low precision
+            contours,ids1 = np.unique(contours, return_index=True)
+            beads_contours = [beads_contours[i] for i in ids1]
+
+            assert( np.any( (contours[:-1] - contours[1:])**2 >= 1e-8 ) )
+
+            ## TODO: keep closest beads beyond +-1.5 if there are fewer than 2 beads
+            tmp = []
+            dist = 1
+            while len(tmp) < 5 and dist < 3:
+                tmp = list(filter(lambda bc: np.abs(bc[1]-0.5) < dist, beads_contours))
+                dist += 0.1
+
+            if len(tmp) <= 1:
+                raise Exception("Failed to fit spline into segment {}".format(s))
+
+            beads = [b for b,c in tmp]
+            contours = [c for b,c in tmp]
+            ids = [b.idx for b in beads]
+            
+            if len(beads) <= 1:
+                pdb.set_trace()
+
+
+            """ Get positions """
+            positions = bead_coordinates[ids,:].T
+
+            # print("BEADS NOT IN {}:".format(s))
+            # for b,c in filter(lambda z: z[0] not in s.beads, zip(beads,contours)):
+            #     print("  {}[{:03f}]: {:0.3f}".format(b.parent.name, b.contour_position, c) )
+
+
+            tck, u = interpolate.splprep( positions, u=contours, s=0, k=1 )
+
+            # if len(beads) < 8:
+            #     ret = interpolate.splprep( positions, u=contours, s=0, k=1, full_output=1 )
+            #     tck = ret[0][0]
+            #     if ret[2] > 0:
+            #         pdb.set_trace()
+
+            # else:
+            #     try:
+            #         ret = interpolate.splprep( positions, u=contours, s=0, k=3, full_output=1 )
+            #         tck = ret[0][0]
+            #         if ret[2] > 0:
+            #             pdb.set_trace()
+            #     except:
+            #         ret = interpolate.splprep( positions, u=contours, s=0, k=1, full_output=1 )
+            #         tck = ret[0][0]
+            #         if ret[2] > 0:
+            #             pdb.set_trace()
+
+            s.position_spline_params = (tck,u)
+
+            """ Get orientation """
+            def get_orientation_vector(bead,tangent):
+                if 'orientation_bead' in bead.__dict__:
+                    o = bead.orientation_bead
+                    oVec = bead_coordinates[o.idx,:] - bead_coordinates[bead.idx,:]
+                    oVec = oVec - oVec.dot(tangent)*tangent
+                    oVec = oVec/np.linalg.norm(oVec)
+                else:
+                    oVec = None
+                return oVec
+
+            def remove_tangential_projection(vector, tangent):
+                """ Assume tangent is normalized """
+                v = vector - vector.dot(tangent)*tangent
+                return v/np.linalg.norm(v)
+
+            def get_orientation_vector(bead,tangent):
+                if 'orientation_bead' in bead.__dict__:
+                    o = bead.orientation_bead
+                    oVec = bead_coordinates[o.idx,:] - bead_coordinates[bead.idx,:]
+                    oVec = remove_tangential_projection(oVec,tangent)
+                else:
+                    oVec = None
+                return oVec
+
+
+            def get_previous_idx_if_none(list_):
+                previous = None
+                result = []
+                i = 0
+                for e in list_:
+                    if e is None:
+                        result.append(previous)
+                    else:
+                        previous = i
+                    i+=1
+                return result
+            def get_next_idx_if_none(list_):
+                tmp = get_previous_idx_if_none(list_[::-1])[::-1]
+                return [ len(list_)-1-idx if idx is not None else idx for idx in tmp ]
+
+            def fill_in_orientation_vectors(contours,orientation_vectors,tangents):
+                result = []
+                last_idx = get_previous_idx_if_none( orientation_vectors )
+                next_idx = get_next_idx_if_none( orientation_vectors )
+                none_idx = 0
+                for c,ov,t in zip(contours,orientation_vectors,tangents):
+                    if ov is not None:
+                        result.append(ov)
+                    else:
+                        p = last_idx[none_idx]
+                        n = next_idx[none_idx]
+                        none_idx += 1
+                        if p is None:
+                            if n is None:
+                                ## Should be quite rare; give something random if it happens
+                                print("WARNING: unable to interpolate orientation")
+                                o = np.array((1,0,0))
+                                result.append( remove_tangential_projection(o,t) )
+                            else:
+                                o = orientation_vectors[n]
+                                result.append( remove_tangential_projection(o,t) )
+                        else:
+                            if n is None:
+                                o = orientation_vectors[p]
+                                result.append( remove_tangential_projection(o,t) )
+                            else:
+                                cp,cn = [contours[i] for i in (p,n)]
+                                op,on = [orientation_vectors[i] for i in (p,n)]
+                                if (cn-cp) > 1e-6:
+                                    o = ((cn-c)*op+(c-cp)*on)/(cn-cp)
+                                else:
+                                    o = op+on
+                                result.append( remove_tangential_projection(o,t) )
+                return result
+
+            tangents = s.contour_to_tangent(contours)
+            orientation_vectors = [get_orientation_vector(b,t) for b,t in zip(beads,tangents)]
+            if len(beads) > 3 and any([e is not None for e in orientation_vectors] ):
+                orientation_vectors = fill_in_orientation_vectors(contours, orientation_vectors, tangents)
+
+                quats = []
+                lastq = None
+                for b,t,oVec in zip(beads,tangents,orientation_vectors):
+                    y = np.cross(t,oVec)
+                    assert( np.abs(np.linalg.norm(y) - 1) < 1e-2 )
+                    q = quaternion_from_matrix( np.array([oVec,y,t]).T)
+                    
+                    if lastq is not None:
+                        if q.dot(lastq) < 0:
+                            q = -q
+                    quats.append( q )
+                    lastq = q
+
+                # pdb.set_trace()
+                quats = np.array(quats)
+                # tck, u = interpolate.splprep( quats.T, u=contours, s=3, k=3 ) ;# cubic spline not as good
+                tck, u = interpolate.splprep( quats.T, u=contours, s=0, k=1 )
+                s.quaternion_spline_params = (tck,u)
+
+    def _generate_bead_model(self,
+                             max_basepairs_per_bead = 7,
+                             max_nucleotides_per_bead = 4,
+                             local_twist=False,
+                             escapable_twist=True):
+        ## TODO: deprecate
+        self.generate_bead_model( max_basepairs_per_bead = max_basepairs_per_bead,
+                                  max_nucleotides_per_bead = max_nucleotides_per_bead,
+                                  local_twist=local_twist,
+                                  escapable_twist=escapable_twist)
+
+    def generate_bead_model(self,
+                             max_basepairs_per_bead = 7,
+                             max_nucleotides_per_bead = 4,
+                             local_twist=False,
+                             escapable_twist=True):
+
+        self.children = self.segments # is this okay?
+        self.clear_beads()
+
+        segments = self.segments
+        for s in segments:
+            s.local_twist = local_twist
+
+        """ Simplify connections """
+        # d_nt = dict()           # 
+        # for s in segments:
+        #     d_nt[s] = 1.5/(s.num_nt-1)
+        # for s in segments:
+        #     ## replace consecutive crossovers with
+        #     cl = sorted( s.get_connections_and_locations("crossover"), key=lambda x: x[1].address )
+        #     last = None
+        #     for entry in cl:
+        #         c,A,B = entry
+        #         if last is not None and \
+        #            (A.address - last[1].address) < d_nt[s]:
+        #             same_type = c.type_ == last[0].type_
+        #             same_dest_seg = B.container == last[2].container
+        #             if same_type and same_dest_seg:
+        #                 if np.abs(B.address - last[2].address) < d_nt[B.container]:
+        #                     ## combine
+        #                     A.combine = last[1]
+        #                     B.combine = last[2]
+
+        #                     ...
+        #         # if last is not None:
+        #         #     s.bead_locations.append(last)
+        #         ...
+        #         last = entry
+        # del d_nt
+
+        """ Generate beads at intrahelical junctions """
+        if self.DEBUG: print( "Adding intrahelical beads at junctions" )
+
+        ## Loop through all connections, generating beads at appropriate locations
+        for c,A,B in self.get_connections("intrahelical"):
+            s1,s2 = [l.container for l in (A,B)]
+
+            assert( A.particle is None )
+            assert( B.particle is None )
+
+            ## TODO: offload the work here to s1
+            # TODOTODO
+            a1,a2 = [l.address   for l in (A,B)]            
+            for a in (a1,a2):
+                assert( np.isclose(a,0) or np.isclose(a,1) )
+            
+            ## TODO improve this for combinations of ssDNA and dsDNA (maybe a1/a2 should be calculated differently)
+            """ Search to see whether bead at location is already found """
+            b = None
+            if isinstance(s1,DoubleStrandedSegment):
+                b = s1.get_nearest_bead(a1) 
+                if b is not None:
+                    assert( b.parent is s1 )
+                    """ if above assertion is true, no problem here """
+                    if np.abs(b.get_nt_position(s1) - s1.contour_to_nt_pos(a1)) > 0.5:
+                        b = None
+            if b is None and isinstance(s2,DoubleStrandedSegment):
+                b = s2.get_nearest_bead(a2)
+                if b is not None:
+                    if np.abs(b.get_nt_position(s2) - s2.contour_to_nt_pos(a2)) > 0.5:
+                        b = None
+
+
+            if b is not None and b.parent not in (s1,s2):
+                b = None
+
+            if b is None:
+                ## need to generate a bead
+                if isinstance(s2,DoubleStrandedSegment):
+                    b = s2._generate_one_bead(a2,0)
+                else:
+                    b = s1._generate_one_bead(a1,0)
+            A.particle = B.particle = b
+            b.is_intrahelical = True
+            b.locations.extend([A,B])
+
+        # pdb.set_trace()
+
+        """ Generate beads at other junctions """
+        for c,A,B in self.get_connections(exclude="intrahelical"):
+            s1,s2 = [l.container for l in (A,B)]
+            if A.particle is not None and B.particle is not None:
+                continue
+            # assert( A.particle is None )
+            # assert( B.particle is None )
+
+            ## TODO: offload the work here to s1/s2 (?)
+            a1,a2 = [l.address   for l in (A,B)]
+
+            def maybe_add_bead(location, seg, address, ):
+                if location.particle is None:
+                    b = seg.get_nearest_bead(address)
+                    try:
+                        distance = seg.contour_to_nt_pos(np.abs(b.contour_position-address))
+                        max_distance =  min(max_basepairs_per_bead, max_nucleotides_per_bead)*0.5
+                        if "is_intrahelical" in b.__dict__:
+                            max_distance = 0.5
+                        if distance >= max_distance:
+                            raise Exception("except")
+
+                        ## combine beads
+                        b.update_position( 0.5*(b.contour_position + address) ) # avg position
+                    except:
+                        b = seg._generate_one_bead(address,0)
+                    location.particle = b
+                    b.locations.append(location)
+
+            maybe_add_bead(A,s1,a1)
+            maybe_add_bead(B,s2,a2)
+
+        """ Some tests """
+        for c,A,B in self.get_connections("intrahelical"):
+            for l in (A,B):
+                if l.particle is None: continue
+                assert( l.particle.parent is not None )
+
+        """ Generate beads in between """
+        if self.DEBUG: print("Generating beads")
+        for s in segments:
+            s._generate_beads( self, max_basepairs_per_bead, max_nucleotides_per_bead )
+
+        # """ Combine beads at junctions as needed """
+        # for c,A,B in self.get_connections():
+        #    ...
+
+        # ## Debug
+        # all_beads = [b for s in segments for b in s.beads]
+        # positions = np.array([b.position for b in all_beads])
+        # dists = positions[:,np.newaxis,:] - positions[np.newaxis,:,:] 
+        # ids = np.where( np.sum(dists**2,axis=-1) + 0.02**2*np.eye(len(dists)) < 0.02**2 )
+        # print( ids )
+        # pdb.set_trace()
+
+        """ Add intrahelical neighbors at connections """
+
+        for c,A,B in self.get_connections("intrahelical"):
+            b1,b2 = [l.particle for l in (A,B)]
+            if b1 is b2:
+                ## already handled by Segment._generate_beads
+                pass
+            else:
+                for b in (b1,b2): assert( b is not None )
+                b1.make_intrahelical_neighbor(b2)
+
+        """ Reassign bead types """
+        if self.DEBUG: print("Assigning bead types")
+        beadtype_s = dict()
+        beadtype_count = dict(D=0,O=0,S=0)
+
+        def _assign_bead_type(bead, num_nt, decimals):
+            num_nt0 = bead.num_nt
+            bead.num_nt = np.around( np.float32(num_nt), decimals=decimals )
+            char = bead.type_.name[0].upper()
+            key = (char, bead.num_nt)
+            if key in beadtype_s:
+                bead.type_ = beadtype_s[key]
+            else:
+                t = deepcopy(bead.type_)
+                t.__dict__["nts"] = bead.num_nt*2 if char in ("D","O") else bead.num_nt
+                # t.name = t.name + "%03d" % (t.nts*10**decimals)
+                t.name = char + "%03d" % (beadtype_count[char])
+                t.mass = t.nts * 150
+                t.diffusivity = 150 if t.nts == 0 else min( 50 / np.sqrt(t.nts/5), 150)
+                beadtype_count[char] += 1
+                if self.DEBUG: print( "{} --> {} ({})".format(num_nt0, bead.num_nt, t.name) )
+                beadtype_s[key] = bead.type_ = t
+
+        # (cluster_size[c-1])
+
+
+        import scipy.cluster.hierarchy as hcluster
+        beads = [b for s in segments for b in s if b.type_.name[0].upper() in ("D","O")]
+        data = np.array([b.num_nt for b in beads])[:,np.newaxis]
+        order = int(2-np.log10(2*max_basepairs_per_bead)//1)
+        try:
+            clusters = hcluster.fclusterdata(data, float(max_basepairs_per_bead)/500, criterion="distance")
+            cluster_size = [np.mean(data[clusters == i]) for i in np.unique(clusters)]
+        except:
+            clusters = np.arange(len(data))+1
+            cluster_size = data.flatten()
+        for b,c in zip(beads,clusters):
+            _assign_bead_type(b, cluster_size[c-1], decimals=order)
+
+        beads = [b for s in segments for b in s if b.type_.name[0].upper() in ("S")]
+        data = np.array([b.num_nt for b in beads])[:,np.newaxis]
+        order = int(2-np.log10(max_nucleotides_per_bead)//1)
+        try:
+            clusters = hcluster.fclusterdata(data, float(max_nucleotides_per_bead)/500, criterion="distance")
+            cluster_size = [np.mean(data[clusters == i]) for i in np.unique(clusters)]
+        except:
+            clusters = np.arange(len(data))+1
+            cluster_size = data.flatten()
+        for b,c in zip(beads,clusters):
+            _assign_bead_type(b, cluster_size[c-1], decimals=order)
+
+        self._apply_grid_potentials_to_beads(beadtype_s)
+
+        # for bead in [b for s in segments for b in s]:
+        #     num_nt0 = bead.num_nt
+        #     # bead.num_nt = np.around( np.float32(num_nt), decimals=decimals )
+        #     key = (bead.type_.name[0].upper(), bead.num_nt)
+        #     if key in beadtype_s:
+        #         bead.type_ = beadtype_s[key]
+        #     else:
+        #         t = deepcopy(bead.type_)
+        #         t.__dict__["nts"] = bead.num_nt*2 if t.name[0].upper() in ("D","O") else bead.num_nt
+        #         # t.name = t.name + "%03d" % (t.nts*10**decimals)
+        #         t.name = t.name + "%.16f" % (t.nts)
+        #         print( "{} --> {} ({})".format(num_nt0, bead.num_nt, t.name) )
+        #         beadtype_s[key] = bead.type_ = t
+
+
+        """ Update bead indices """
+        self._countParticleTypes() # probably not needed here
+        self._updateParticleOrder()
+
+        """ Add intrahelical bond potentials """
+        if self.DEBUG: print("Adding intrahelical bond potentials")
+        dists = dict()          # intrahelical distances built for later use
+        intra_beads = self._get_intrahelical_beads() 
+        if self.DEBUG: print("  Adding %d bonds" % len(intra_beads))
+        for b1,b2 in intra_beads:
+            # assert( not np.isclose( np.linalg.norm(b1.collapsedPosition() - b2.collapsedPosition()), 0 ) )
+            if np.linalg.norm(b1.collapsedPosition() - b2.collapsedPosition()) < 1:
+                # print("WARNING: some beads are very close")
+                ...
+
+            parent = self._getParent(b1,b2)
+
+            ## TODO: could be sligtly smarter about sep
+            sep = 0.5*(b1.num_nt+b2.num_nt)
+
+            conversion = 0.014393265 # units "pN/AA" kcal_mol/AA^2
+            if b1.type_.name[0] == "D" and b2.type_.name[0] == "D":
+                elastic_modulus_times_area = 1000 # pN http://markolab.bmbcb.northwestern.edu/marko/Cocco.CRP.02.pdf
+                d = 3.4*sep
+                k = conversion*elastic_modulus_times_area/d
+            else:
+                ## TODO: get better numbers our ssDNA model
+                elastic_modulus_times_area = 800 # pN http://markolab.bmbcb.northwestern.edu/marko/Cocco.CRP.02.pdf
+                d = 5*sep
+                k = conversion*elastic_modulus_times_area/d
+                # print(sep,d,k)
+              
+            if b1 not in dists:
+                dists[b1] = dict()
+            if b2 not in dists:
+                dists[b2] = dict()
+            # dists[b1].append([b2,sep])
+            # dists[b2].append([b1,sep])
+            dists[b1][b2] = sep
+            dists[b2][b1] = sep
+
+            if b1 is b2: continue
+
+            # dists[[b1,b2]] = dists[[b2,b1]] = sep
+            bond = self.get_bond_potential(k,d)
+            parent.add_bond( b1, b2, bond, exclude=True )
+
+        # for s in self.segments:
+        #     sepsum = 0
+        #     beadsum = 0
+        #     for b1 in s.beads:
+        #         beadsum += b1.num_nt
+        #         for bead_list in self._recursively_get_beads_within_bonds(b1, 1):
+        #             assert(len(bead_list) == 1)
+        #             if b1.idx < bead_list[-1].idx: # avoid double-counting
+        #                 for b2 in bead_list:
+        #                     if b2.parent == b1.parent:
+        #                         sepsum += dists[b1][b2]
+        #     sepsum += sep
+        #     print("Helix {}: bps {}, beads {}, separation {}".format(s.name, s.num_nt, beadsum, sepsum))
+
+        """ Add intrahelical angle potentials """
+        def get_effective_dsDNA_Lp(sep):
+
+            """ The persistence length of our model was found to be a
+            little off (probably due to NB interactions). This
+            attempts to compensate """
+
+            ## For 1 bp, Lp=559, for 25 Lp = 524
+            beads_per_bp = sep/2
+            Lp0 = 147
+            # return 0.93457944*Lp0 ;# factor1
+            return 0.97*Lp0 ;# factor2
+            # factor = bead_per_bp * (0.954-0.8944
+            # return Lp0 * bead_per_bp
+
+        empirical_compensation_factor = max_basepairs_per_bead
+        
+        if self.DEBUG: print("Adding intrahelical angle potentials")
+        for b1,b2,b3 in self._get_intrahelical_angle_beads():
+            ## TODO: could be slightly smarter about sep
+            sep = 0.5*(0.5*b1.num_nt+b2.num_nt+0.5*b3.num_nt)
+            parent = self._getParent(b1,b2,b3)
+
+            kT = 0.58622522         # kcal/mol
+            if b1.type_.name[0] == "D" and b2.type_.name[0] == "D" and b3.type_.name[0] == "D":
+                Lp = get_effective_dsDNA_Lp(sep)
+                k = angle_spring_from_lp(sep,Lp)
+                if local_twist:
+                    k_dihed = 0.25*k
+                    k *= 0.75    # reduce because orientation beads impose similar springs
+                    dihed = self.get_dihedral_potential(k_dihed,180)
+                    parent.add_dihedral(b1,b2,b2.orientation_bead,b3, dihed)
+
+
+            else:
+                ## TODO: get correct number from ssDNA model
+                k = angle_spring_from_lp(sep,2)
+
+            angle = self.get_angle_potential(k,180)
+            parent.add_angle( b1, b2, b3, angle )
+
+        """ Add intrahelical exclusions """
+        if self.DEBUG: print("Adding intrahelical exclusions")
+        beads = dists.keys()
+        def _recursively_get_beads_within(b1,d,done=()):
+            ret = []
+            for b2,sep in dists[b1].items():
+                if b2 in done: continue
+                if sep < d:
+                    ret.append( b2 )
+                    done.append( b2 )
+                    tmp = _recursively_get_beads_within(b2, d-sep, done)
+                    if len(tmp) > 0: ret.extend(tmp)
+            return ret
+
+        exclusions = set()
+        for b1 in beads:
+            exclusions.update( [(b1,b) for b in _recursively_get_beads_within(b1, 20, done=[b1])] )
+
+        if self.DEBUG: print("Adding %d exclusions" % len(exclusions))
+        for b1,b2 in exclusions:
+            parent = self._getParent(b1,b2)
+            parent.add_exclusion( b1, b2 )
+
+        """ Twist potentials """
+        if local_twist:
+            if self.DEBUG: print("Adding twist potentials")
+
+            for b1 in beads:
+                if "orientation_bead" not in b1.__dict__: continue
+                for b2,sep in dists[b1].items():
+                    if "orientation_bead" not in b2.__dict__: continue
+                    if b2.idx < b1.idx: continue # Don't double-count
+
+                    p1,p2 = [b.parent for b in (b1,b2)]
+                    o1,o2 = [b.orientation_bead for b in (b1,b2)]
+
+                    parent = self._getParent( b1, b2 )
+
+                    """ Add heuristic 90 degree potential to keep orientation bead orthogonal """
+                    Lp = get_effective_dsDNA_Lp(sep)
+                    k = 0.5*angle_spring_from_lp(sep,Lp)
+                    pot = self.get_angle_potential(k,90)
+                    parent.add_angle(o1,b1,b2, pot)
+                    parent.add_angle(b1,b2,o2, pot)
+
+                    ## TODO: improve this
+                    twist_per_nt = 0.5 * (p1.twist_per_nt + p2.twist_per_nt)
+                    angle = sep*twist_per_nt
+                    if angle > 360 or angle < -360:
+                        print("WARNING: twist angle out of normal range... proceeding anyway")
+                        # raise Exception("The twist between beads is too large")
+                        
+                    k = self._get_twist_spring_constant(sep)
+                    if escapable_twist:
+                        pot = self.get_dihedral_potential(k,angle,max_potential=1)
+                    else:
+                        pot = self.get_dihedral_potential(k,angle)
+                    parent.add_dihedral(o1,b1,b2,o2, pot)
+
+        def k_angle(sep):
+            return  0.5*angle_spring_from_lp(sep,147)
+
+        def k_xover_angle(sep):
+            return 0.5 * k_angle(sep)
+
+        def add_local_crossover_orientation_potential(b1,b2,is_parallel=True):
+            u1,u2 = [b.get_intrahelical_above() for b in (b1,b2)]
+            d1,d2 = [b.get_intrahelical_below() for b in (b1,b2)]
+
+            k = k_xover_angle(sep=1)
+            pot = self.get_angle_potential(k,120)
+
+            if 'orientation_bead' in b1.__dict__:
+                o = b1.orientation_bead
+                self.add_angle( o,b1,b2, pot )
+            if 'orientation_bead' in b2.__dict__:
+                o = b2.orientation_bead
+                self.add_angle( b1,b2,o, pot )
+
+            if 'orientation_bead' in b1.__dict__:
+                t0 = -90 if A.on_fwd_strand else 90
+                if not is_parallel: t0 *= -1
+
+                o1 = b1.orientation_bead
+                if u2 is not None and isinstance(u2.parent,DoubleStrandedSegment):
+                    k = k_xover_angle( dists[b2][u2] )
+                    pot = self.get_dihedral_potential(k,t0)
+                    self.add_dihedral( o1,b1,b2,u2, pot )
+                elif d2 is not None and isinstance(d2.parent,DoubleStrandedSegment):
+                    k = k_xover_angle( dists[b2][d2] )
+                    pot = self.get_dihedral_potential(k,-t0)
+                    self.add_dihedral( o1,b1,b2,d2, pot )
+            if 'orientation_bead' in b2.__dict__:
+                t0 = -90 if B.on_fwd_strand else 90
+                if not is_parallel: t0 *= -1
+
+                o2 = b2.orientation_bead
+                if u1 is not None and isinstance(u1.parent,DoubleStrandedSegment):
+                    k = k_xover_angle( dists[b1][u1] )
+                    pot = self.get_dihedral_potential(k,t0)
+                    self.add_dihedral( o2,b2,b1,u1, pot )
+                elif d1 is not None and isinstance(d1.parent,DoubleStrandedSegment):
+                    k = k_xover_angle( dists[b1][d1] )
+                    pot = self.get_dihedral_potential(k,-t0)
+                    self.add_dihedral( o2,b2,b1,d1, pot )
+
+
+        """ Add connection potentials """
+        for c,A,B in self.get_connections("terminal_crossover"):
+            ## TODO: use a better description here
+            b1,b2 = [loc.particle for loc in (c.A,c.B)]
+            # pot = self.get_bond_potential(4,18.5)
+            pot = self.get_bond_potential(4,12)
+            self.add_bond(b1,b2, pot)
+
+            dotProduct = b1.parent.contour_to_tangent(b1.contour_position).dot(
+                b2.parent.contour_to_tangent(b2.contour_position) )
+
+           ## Add potential to provide a particular orinetation
+            if local_twist:
+                add_local_crossover_orientation_potential(b1,b2, is_parallel=dotProduct > 0)
+
+
+        """ Add connection potentials """
+        for c,A,B in self.get_connections("sscrossover"):
+            b1,b2 = [loc.particle for loc in (c.A,c.B)]
+            ## TODO: improve parameters
+            pot = self.get_bond_potential(4,6)
+            self.add_bond(b1,b2, pot)
+
+            ## Add potentials to provide a sensible orientation
+            ## TODO refine potentials against all-atom simulation data
+            """
+            u1,u2 = [b.get_intrahelical_above() for b in (b1,b2)]
+            d1,d2 = [b.get_intrahelical_below() for b in (b1,b2)]
+            k_fn = k_angle
+            if isinstance(b1.parent,DoubleStrandedSegment):
+                a,b,c = (d1,b1,b2) if d1.parent is b1.parent else (u1,b1,b2)
+            else:
+                a,b,c = (d2,b2,b1) if d2.parent is b2.parent else (u2,b2,b1)
+            """
+
+            # pot = self.get_angle_potential( k_fn(dists[a][b]), 120 ) # a little taller than 90 degrees
+            # self.add_angle( a,b,c, pot )
+            # o = b.orientation_bead
+            # angle=3
+            # pot = self.get_angle_potential( 1, 0 ) # a little taller than 90 degrees
+            # self.add_angle( a,b,c, pot )
+
+            dotProduct = b1.parent.contour_to_tangent(b1.contour_position).dot(
+                b2.parent.contour_to_tangent(b2.contour_position) )
+
+            if local_twist:
+                add_local_crossover_orientation_potential(b1,b2, is_parallel=dotProduct > 0)
+
+        
+        crossover_bead_pots = set()
+        for c,A,B in self.get_connections("crossover"):
+            b1,b2 = [loc.particle for loc in (A,B)]
+
+            ## Avoid double-counting
+            if (b1,b2,A.on_fwd_strand,B.on_fwd_strand) in crossover_bead_pots: continue
+            crossover_bead_pots.add((b1,b2,A.on_fwd_strand,B.on_fwd_strand))
+            crossover_bead_pots.add((b2,b1,B.on_fwd_strand,A.on_fwd_strand))
+                
+            pot = self.get_bond_potential(4,18.5)
+            self.add_bond(b1,b2, pot)
+
+            ## Get beads above and below
+            u1,u2 = [b.get_intrahelical_above() for b in (b1,b2)]
+            d1,d2 = [b.get_intrahelical_below() for b in (b1,b2)]
+            dotProduct = b1.parent.contour_to_tangent(b1.contour_position).dot(
+                b2.parent.contour_to_tangent(b2.contour_position) )
+            if dotProduct < 0:
+                tmp = d2
+                d2  = u2
+                u2  = tmp
+
+            a = None
+            if u1 is not None and u2 is not None:
+                t0 = 0
+                a,b,c,d = (u1,b1,b2,u2)
+            elif d1 is not None and d2 is not None:
+                t0 = 0
+                a,b,c,d = (d1,b1,b2,d2 )
+            elif d1 is not None and u2 is not None:
+                t0 = 180
+                a,b,c,d = (d1,b1,b2,u2)
+            elif u1 is not None and d2 is not None:
+                t0 = 180
+                a,b,c,d = (u1,b1,b2,d2)
+
+            if a is not None:
+                k = k_xover_angle( dists[b][a]+dists[c][d] )
+                pot = self.get_dihedral_potential(k,t0)
+                self.add_dihedral( a,b,c,d,  pot )
+
+            if local_twist:
+                add_local_crossover_orientation_potential(b1,b2, is_parallel=dotProduct > 0)
+
+            
+        ## TODOTODO check that this works
+        for crossovers in self.get_consecutive_crossovers():
+            if local_twist: break
+            ## filter crossovers
+            for i in range(len(crossovers)-2):
+                c1,A1,B1,dir1 = crossovers[i]
+                c2,A2,B2,dir2 = crossovers[i+1]
+                s1,s2 = [l.container for l in (A1,A2)]
+                sep = A1.particle.get_nt_position(s1,near_address=A1.address) - A2.particle.get_nt_position(s2,near_address=A2.address)
+                sep = np.abs(sep)
+
+                assert(sep >= 0)
+
+                n1,n2,n3,n4 = (B1.particle, A1.particle, A2.particle, B2.particle)
+
+                """
+                <cos(q)> = exp(-s/Lp) = integrate( cos[x] exp(-A x^2), {x, 0, pi} ) / integrate( exp(-A x^2), {x, 0, pi} )
+                """
+
+                ## From http://www.annualreviews.org/doi/pdf/10.1146/annurev.bb.17.060188.001405
+                ##   units "3e-19 erg cm/ 295 k K" "nm" =~ 73
+                Lp = s1.twist_persistence_length/0.34  # set semi-arbitrarily as there is a large spread in literature
+
+                def get_spring(sep):
+                    fitFun = lambda x: np.real(erf( (4*np.pi*x + 1j)/(2*np.sqrt(x)) )) * np.exp(-1/(4*x)) / erf(2*np.sqrt(x)*np.pi) - np.exp(-sep/Lp)
+                    k = opt.leastsq( fitFun, x0=np.exp(-sep/Lp) )
+                    return k[0][0] * 2*kT*0.00030461742
+
+                k = get_spring( max(sep,2) )
+                t0 = sep*s1.twist_per_nt # TODO weighted avg between s1 and s2
+                
+                # pdb.set_trace()
+                if A1.on_fwd_strand: t0 -= 120
+                if dir1 != dir2:
+                    A2_on_fwd = not A2.on_fwd_strand
+                else:
+                    A2_on_fwd = A2.on_fwd_strand
+                if A2_on_fwd: t0 += 120
+   
+                # t0 = (t0 % 360
+
+                # if n2.idx == 0:
+                #     print( n1.idx,n2.idx,n3.idx,n4.idx,k,t0,sep )
+                if sep == 0 and n1 is not n4:
+                    # pot = self.get_angle_potential(k,t0)
+                    # self.add_angle( n1,n2,n4, pot )
+                    pass
+                else:
+                    pot = self.get_dihedral_potential(k,t0)
+                    self.add_dihedral( n1,n2,n3,n4, pot )
+
+        # ## remove duplicate potentials; ## TODO ensure that they aren't added twice in the first place? 
+        # self.remove_duplicate_terms()
+
+    def walk_through_helices(segment, direction=1, processed_segments=None):
+        """
+    
+        First and last segment should be same for circular helices
+        """
+
+        assert( direction in (1,-1) )
+        if processed_segments == None:
+            processed_segments = set()
+
+        def segment_is_new_helix(s):
+            return isinstance(s,DoubleStrandedSegment) and s not in processed_segments
+
+        new_s = None
+        s = segment
+        ## iterate intrahelically connected dsDNA segments
+        while segment_is_new_helix(s):
+            conn_locs = s.get_contour_sorted_connections_and_locations("intrahelical")[::direction]
+            processed_segments.add(new_s)        
+            new_s = None
+            new_dir = None
+            for i in range(len(conn_locs)):
+                c,A,B = conn_locs[i]
+                ## TODO: handle change of direction
+                # TODOTODO
+                address = 1*(direction==-1)
+                if A.address == address and segment_is_new_helix(B.container):
+                    new_s = B.container
+                    assert(B.address in (0,1))
+                    new_dir = 2*(B.address == 0) - 1
+                    break
+
+            yield s,direction
+            s = new_s   # will break if None
+            direction = new_dir
+            
+        #     if new_s is None:
+        #         break
+        #     else:
+        #         s = new_s
+        # yield s
+        ## return s
+
+
+    def get_consecutive_crossovers(self):
+        ## TODOTODO TEST
+        crossovers = []
+        processed_segments = set()
+        for s1 in self.segments:
+            if not isinstance(s1,DoubleStrandedSegment):
+                continue
+            if s1 in processed_segments: continue
+
+            s0,d0 = list(SegmentModel.walk_through_helices(s1,direction=-1))[-1]
+
+            # s,direction = get_start_of_helices()
+            tmp = []
+            for s,d in SegmentModel.walk_through_helices(s0,-d0):
+                if s == s0 and len(tmp) > 0:
+                    ## end of circular helix, only add first crossover
+                    cl_list = s.get_contour_sorted_connections_and_locations("crossover")
+                    if len(cl_list) > 0:
+                        tmp.append( cl_list[::d][0] + [d] )
+                else:
+                    tmp.extend( [cl + [d] for cl in s.get_contour_sorted_connections_and_locations("crossover")[::d]] )
+                processed_segments.add(s)
+            crossovers.append(tmp)
+        return crossovers
+
+    def set_sequence(self, sequence, force=True):
+        if force:
+            self.strands[0].set_sequence(sequence)
+        else:
+            try:
+                self.strands[0].set_sequence(sequence)
+            except:
+                ...
+        for s in self.segments:
+            s.randomize_unset_sequence()
+
+    def _generate_strands(self):
+        ## clear strands
+        try:
+            for s in self.strands:
+                self.children.remove(s)
+            for seg in self.segments:
+                for d in ('fwd','rev'):
+                    seg.strand_pieces[d] = []
+        except:
+            pass
+        self.strands = strands = []
+
+        """ Ensure unconnected ends have 5prime Location objects """
+        for seg in self.segments:
+            ## TODO move into Segment calls
+            five_prime_locs = sum([seg.get_locations(s) for s in ("5prime","crossover","terminal_crossover")],[])
+            three_prime_locs = sum([seg.get_locations(s) for s in ("3prime","crossover","terminal_crossover")],[])
+
+            def is_start_5prime(l):
+                return l.get_nt_pos() < 1 and l.on_fwd_strand
+            def is_end_5prime(l):
+                return l.get_nt_pos() > seg.num_nt-2 and not l.on_fwd_strand
+            def is_start_3prime(l):
+                return l.get_nt_pos() < 1 and not l.on_fwd_strand
+            def is_end_3prime(l):
+                return l.get_nt_pos() > seg.num_nt-2 and l.on_fwd_strand
+
+            if seg.start5.connection is None:
+                if len(list(filter( is_start_5prime, five_prime_locs ))) == 0:
+                    seg.add_5prime(0) # TODO ensure this is the same place
+
+            if 'end5' in seg.__dict__ and seg.end5.connection is None:
+                if len(list(filter( is_end_5prime, five_prime_locs ))) == 0:
+                    seg.add_5prime(seg.num_nt-1,on_fwd_strand=False)
+
+            if 'start3' in seg.__dict__ and seg.start3.connection is None:
+                if len(list(filter( is_start_3prime, three_prime_locs ))) == 0:
+                    seg.add_3prime(0,on_fwd_strand=False)
+
+            if seg.end3.connection is None:
+                if len(list(filter( is_end_3prime, three_prime_locs ))) == 0:
+                    seg.add_3prime(seg.num_nt-1)
+
+            # print( [(l,l.get_connected_location()) for l in seg.locations] )
+            # addresses = np.array([l.address for l in seg.get_locations("5prime")])
+            # if not np.any( addresses == 0 ):
+            #     ## check if end is connected
+        # for c,l,B in self.get_connections_and_locations():
+        #     if c[0]
+
+        """ Build strands from connectivity of helices """
+        def _recursively_build_strand(strand, segment, pos, is_fwd, mycounter=0, move_at_least=0.5):
+            seg = segment
+            history = []
+            while True:
+                mycounter+=1
+                if mycounter > 10000:
+                    raise Exception("Too many iterations")
+
+                #if seg.name == "22-1" and pos > 140:
+                # if seg.name == "22-2":
+                #     import pdb
+                #     pdb.set_trace()
+
+                end_pos, next_seg, next_pos, next_dir, move_at_least = seg.get_strand_segment(pos, is_fwd, move_at_least)
+                history.append((seg,pos,end_pos,is_fwd))
+                try:
+                    strand.add_dna(seg, pos, end_pos, is_fwd)
+                except CircularDnaError:
+                    ## Circular DNA was found
+                    break
+                except:
+                    print("Unexpected error:", sys.exc_info()[0])
+                    # import pdb
+                    # pdb.set_trace()
+                    # seg.get_strand_segment(pos, is_fwd, move_at_least)
+                    # strand.add_dna(seg, pos, end_pos, is_fwd)
+                    raise
+
+                if next_seg is None:
+                    break
+                else:
+                    seg,pos,is_fwd = (next_seg, next_pos, next_dir)
+            strand.history = list(history)
+            return history
+
+        strand_counter = 0
+        history = []
+        for seg in self.segments:
+            locs = filter(lambda l: l.connection is None, seg.get_5prime_locations())
+            if locs is None: continue
+            # for pos, is_fwd in locs:
+            for l in locs:
+                # print("Tracing",l)
+                # TODOTODO
+                pos = seg.contour_to_nt_pos(l.address, round_nt=True)
+                is_fwd = l.on_fwd_strand
+                s = Strand(segname="S{:03d}".format(len(strands)))
+                strand_history = _recursively_build_strand(s, seg, pos, is_fwd)
+                history.append((l,strand_history))
+                # print("{} {}".format(seg.name,s.num_nt))
+                strands.append(s)
+
+        ## Trace circular DNA
+        def strands_cover_segment(segment, is_fwd=True):
+            direction = 'fwd' if is_fwd else 'rev'
+            nt = 0
+            for sp in segment.strand_pieces[direction]:
+                nt += sp.num_nt
+            return nt == segment.num_nt
+
+        def find_nt_not_in_strand(segment, is_fwd=True):
+            fwd_str = 'fwd' if is_fwd else 'rev'
+
+            def check(val):
+                assert(val >= 0 and val < segment.num_nt)
+                # print("find_nt_not_in_strand({},{}) returning {}".format(
+                #     segment, is_fwd, val))
+                return val
+
+            if is_fwd:
+                last = -1
+                for sp in segment.strand_pieces[fwd_str]:
+                    if sp.start-last > 1:
+                        return check(last+1)
+                    last = sp.end
+                return check(last+1)
+            else:
+                last = segment.num_nt
+                for sp in segment.strand_pieces[fwd_str]:
+                    if last-sp.end > 1:
+                        return check(last-1)
+                    last = sp.start
+                return check(last-1)
+
+        def add_strand_if_needed(seg,is_fwd):
+            history = []
+            if not strands_cover_segment(seg, is_fwd):
+                pos = nt = find_nt_not_in_strand(seg, is_fwd)
+                s = Strand(is_circular = True)
+                history = _recursively_build_strand(s, seg, pos, is_fwd)
+                strands.append(s)
+            return history
+
+        for seg in self.segments:
+            add_strand_if_needed(seg,True)
+            if isinstance(seg, DoubleStrandedSegment):
+                add_strand_if_needed(seg,False)
+
+        self.strands = sorted(strands, key=lambda s:s.num_nt)[::-1]
+        def check_strands():
+            dsdna = filter(lambda s: isinstance(s,DoubleStrandedSegment), self.segments)
+            for s in dsdna:
+                nt_fwd = nt_rev = 0
+                for sp in s.strand_pieces['fwd']:
+                    nt_fwd += sp.num_nt
+                for sp in s.strand_pieces['rev']:
+                    nt_rev += sp.num_nt
+                assert( nt_fwd == s.num_nt and nt_rev == s.num_nt )
+                # print("{}: {},{} (fwd,rev)".format(s.name, nt_fwd/s.num_nt,nt_rev/s.num_nt))
+        check_strands()
+
+        ## relabel segname
+        counter = 0
+        for s in self.strands:
+            if s.segname is None:
+                s.segname = "D%03d" % counter
+            counter += 1
+
+    def _assign_basepairs(self):
+        ## Assign basepairs
+        for seg in self.segments:
+            if isinstance(seg, DoubleStrandedSegment):
+                strands1 = seg.strand_pieces['fwd'] # already sorted
+                strands2 = seg.strand_pieces['rev']
+
+                nts1 = [nt for s in strands1 for nt in s.children]
+                nts2 = [nt for s in strands2 for nt in s.children[::-1]]
+                assert(len(nts1) == len(nts2))
+                for nt1,nt2 in zip(nts1,nts2):
+                    ## TODO weakref
+                    nt1.basepair = nt2
+                    nt2.basepair = nt1
+
+    def _update_orientations(self,orientation):
+        for s in self.strands:
+            s.update_atomic_orientations(orientation)
+
+    def write_atomic_ENM(self, output_name, lattice_type=None):
+        ## TODO: ensure atomic model was generated already
+        if lattice_type is None:
+            try:
+                lattice_type = self.lattice_type
+            except:
+                lattice_type = "square"
+        else:
+            try:
+                if lattice_type != self.lattice_type:
+                    print("WARNING: printing ENM with a lattice type ({}) that differs from model's lattice type ({})".format(lattice_type,self.lattice_type))
+            except:
+                pass
+
+        if lattice_type == "square":
+            enmTemplate = enmTemplateSQ
+        elif lattice_type == "honeycomb":
+            enmTemplate = enmTemplateHC
+        else:
+            raise Exception("Lattice type '%s' not supported" % self.latticeType)
+
+        ## TODO: allow ENM to be created without first building atomic model
+        noStackPrime = 0
+        noBasepair = 0
+        with open("%s.exb" % output_name,'w') as fh:
+            # natoms=0
+
+            for seg in self.segments:
+                ## Continue unless dsDNA
+                if not isinstance(seg,DoubleStrandedSegment): continue
+                for strand_piece in seg.strand_pieces['fwd'] + seg.strand_pieces['rev']:
+                    for nt1 in strand_piece.children:
+                        other = []
+                        nt2 = nt1.basepair
+                        if strand_piece.is_fwd:
+                            other.append((nt2,'pair'))
+
+                        nt2 = nt2.get_intrahelical_above()
+                        if nt2 is not None and strand_piece.is_fwd:
+                            ## TODO: check if this already exists
+                            other.append((nt2,'paircross'))
+
+                        nt2 = nt1.get_intrahelical_above()
+                        if nt2 is not None:
+                            other.append((nt2,'stack'))
+                            nt2 = nt2.basepair
+                            if nt2 is not None and strand_piece.is_fwd:
+                                other.append((nt2,'cross'))
+
+                        for nt2,key in other:
+                            """
+                            if np.linalg.norm(nt2.position-nt1.position) > 7:
+                                import pdb
+                                pdb.set_trace()
+                            """
+                            key = ','.join((key,nt1.sequence[0],nt2.sequence[0]))
+                            for n1, n2, d in enmTemplate[key]:
+                                d = float(d)
+                                k = 0.1
+                                if lattice_type == 'honeycomb':
+                                    correctionKey = ','.join((key,n1,n2))
+                                    assert(correctionKey in enmCorrectionsHC)
+                                    dk,dr = enmCorrectionsHC[correctionKey]
+                                    k  = float(dk)
+                                    d += float(dr)
+
+                                i = nt1._get_atomic_index(name=n1)
+                                j = nt2._get_atomic_index(name=n2)
+                                fh.write("bond %d %d %f %.2f\n" % (i,j,k,d))
+
+            # print("NO STACKS found for:", noStackPrime)
+            # print("NO BASEPAIRS found for:", noBasepair)
+
+        ## Loop dsDNA regions
+        push_bonds = []
+        processed_segs = set()
+        ## TODO possibly merge some of this code with SegmentModel.get_consecutive_crossovers()
+        for segI in self.segments: # TODOTODO: generalize through some abstract intrahelical interface that effectively joins "segments", for now interhelical bonds that cross intrahelically-connected segments are ignored
+            if not isinstance(segI,DoubleStrandedSegment): continue
+
+            ## Loop over dsDNA regions connected by crossovers
+            conn_locs = segI.get_contour_sorted_connections_and_locations("crossover")
+            other_segs = list(set([B.container for c,A,B in conn_locs]))
+            for segJ in other_segs:
+                if (segI,segJ) in processed_segs:
+                    continue
+                processed_segs.add((segI,segJ))
+                processed_segs.add((segJ,segI))
+
+                ## TODO perhaps handle ends that are not between crossovers
+
+                ## Loop over ordered pairs of crossovers between the two
+                cls = filter(lambda x: x[-1].container == segJ, conn_locs)
+                cls = sorted( cls, key=lambda x: x[1].get_nt_pos() )
+                for cl1,cl2 in zip(cls[:-1],cls[1:]):
+                    c1,A1,B1 = cl1
+                    c2,A2,B2 = cl2
+
+                    ntsI1,ntsI2 = [segI.contour_to_nt_pos(A.address) for A in (A1,A2)]
+                    ntsJ1,ntsJ2 = [segJ.contour_to_nt_pos(B.address) for B in (B1,B2)]
+                    ntsI = ntsI2-ntsI1+1
+                    ntsJ = ntsJ2-ntsJ1+1
+                    assert( np.isclose( ntsI, int(round(ntsI)) ) )
+                    assert( np.isclose( ntsJ, int(round(ntsJ)) ) )
+                    ntsI,ntsJ = [int(round(i)) for i in (ntsI,ntsJ)]
+
+                    ## Find if dsDNA "segments" are pointing in same direction
+                    ## could move this block out of the loop
+                    tangentA = segI.contour_to_tangent(A1.address)
+                    tangentB = segJ.contour_to_tangent(B1.address)
+                    dot1 = tangentA.dot(tangentB)
+                    tangentA = segI.contour_to_tangent(A2.address)
+                    tangentB = segJ.contour_to_tangent(B2.address)
+                    dot2 = tangentA.dot(tangentB)
+
+                    if dot1 > 0.5 and dot2 > 0.5:
+                        ...
+                    elif dot1 < -0.5 and dot2 < -0.5:
+                        ## TODO, reverse
+                        ...
+                        # print("Warning: {} and {} are on antiparallel helices (not yet implemented)... skipping".format(A1,B1))
+                        continue
+                    else:
+                        # print("Warning: {} and {} are on helices that do not point in similar direction... skipping".format(A1,B1))
+                        continue
+
+                    ## Go through each nucleotide between the two
+                    for ijmin in range(min(ntsI,ntsJ)):
+                        i=j=ijmin
+                        if ntsI < ntsJ:
+                            j = int(round(float(ntsJ*i)/ntsI))
+                        elif ntsJ < ntsI:
+                            i = int(round(float(ntsI*j)/ntsJ))
+                        ntI_idx = int(round(ntsI1+i))
+                        ntJ_idx = int(round(ntsJ1+j))
+
+                        ## Skip nucleotides that are too close to crossovers
+                        if i < 11 or j < 11: continue
+                        if ntsI2-ntI_idx < 11 or ntsJ2-ntJ_idx < 11: continue
+
+                        ## Find phosphates at ntI/ntJ
+                        for direction in [True,False]:
+                            try:
+                                i = segI._get_atomic_nucleotide(ntI_idx, direction)._get_atomic_index(name="P")
+                                j = segJ._get_atomic_nucleotide(ntJ_idx, direction)._get_atomic_index(name="P")
+                                push_bonds.append((i,j))
+                            except:
+                                # print("WARNING: could not find 'P' atom in {}:{} or {}:{}".format( segI, ntI_idx, segJ, ntJ_idx ))
+                                ...
+
+        # print("PUSH BONDS:", len(push_bonds))
+
+        if not self.useTclForces:
+            with open("%s.exb" % output_name, 'a') as fh:
+                for i,j in push_bonds:
+                    fh.write("bond %d %d %f %.2f\n" % (i,j,1.0,31))
+        else:
+            flat_push_bonds = list(sum(push_bonds))
+            atomList = list(set( flat_push_bonds ))
+            with open("%s.forces.tcl" % output_name,'w') as fh:
+                fh.write("set atomList {%s}\n\n" %
+                         " ".join([str(x-1) for x in  atomList]) )
+                fh.write("set bonds {%s}\n" %
+                         " ".join([str(x-1) for x in flat_push_bonds]) )
+                fh.write("""
+foreach atom $atomList {
+    addatom $atom
+}
+
+proc calcforces {} {
+    global atomList bonds
+    loadcoords rv
+
+    foreach i $atomList {
+        set force($i) {0 0 0}
+    }
+
+    foreach {i j} $bonds {
+        set rvec [vecsub $rv($j) $rv($i)]
+        # lassign $rvec x y z
+        # set r [expr {sqrt($x*$x+$y*$y+$z*$z)}]
+        set r [getbond $rv($j) $rv($i)]
+        set f [expr {2*($r-31.0)/$r}]
+        vecadd $force($i) [vecscale $f $rvec]
+        vecadd $force($j) [vecscale [expr {-1.0*$f}] $rvec]
+    }
+
+    foreach i $atomList {
+        addforce $i $force($i)
+    }
+
+}
+""")
+
+    def dimensions_from_structure( self, padding_factor=1.5, isotropic=False ):
+        positions = []
+        for s in self.segments:
+            positions.append(s.contour_to_position(0))
+            positions.append(s.contour_to_position(0.5))
+            positions.append(s.contour_to_position(1))
+        positions = np.array(positions)
+        dx,dy,dz = [(np.max(positions[:,i])-np.min(positions[:,i])+30)*padding_factor for i in range(3)]
+        if isotropic:
+            dx = dy = dz = max((dx,dy,dz))
+        return [dx,dy,dz]
+
+    def add_grid_potential(self, grid_file, scale=1, per_nucleotide=True):
+        grid_file = Path(grid_file)
+        if not grid_file.is_file():
+            raise ValueError("Grid file {} does not exist".format(grid_file))
+        if not grid_file.is_absolute():
+            grid_file = Path.cwd() / grid_file
+        self.grid_potentials.append((grid_file,scale,per_nucleotide))
+
+    def _apply_grid_potentials_to_beads(self, bead_type_dict):
+        if len(self.grid_potentials) > 1:
+            raise NotImplementedError("Multiple grid potentials are not yet supported")
+
+        for grid_file, scale, per_nucleotide in self.grid_potentials:
+            for key,particle_type in bead_type_dict.items():
+                if particle_type.name[0] == "O": continue
+                s = scale*particle_type.nts if per_nucleotide else scale
+                try:
+                    particle_type.grid = particle_type.grid + (grid_file, s)
+                except:
+                    particle_type.grid = tuple((grid_file, s))
+
+    def _generate_atomic_model(self, scale=1):
+        ## TODO: deprecate
+        self.generate_atomic_model(scale=scale)
+
+    def generate_atomic_model(self, scale=1):
+        self.clear_beads()
+        self.children = self.strands # TODO: is this going to be okay? probably
+        first_atomic_index = 0
+        for s in self.strands:
+            first_atomic_index = s.generate_atomic_model(scale,first_atomic_index)
+        self._assign_basepairs()
+        return
+
+        ## Angle optimization
+        angles = np.linspace(-180,180,180)
+        score = []
+        for a in angles:
+            o = rotationAboutAxis([0,0,1], a)
+            sum2 = count = 0
+            for s in self.strands:
+                s.update_atomic_orientations(o)
+                for s1,s2 in zip(s.strand_segments[:-1],s.strand_segments[1:]):
+                    nt1 = s1.children[-1]
+                    nt2 = s2.children[0]
+                    o3 = nt1.atoms_by_name["O3'"]
+                    p = nt2.atoms_by_name["P"]
+                    sum2 += np.sum((p.collapsedPosition()-o3.collapsedPosition())**2)
+                    count += 1
+            score.append(sum2/count)
+        print(angles[np.argmin(score)])
+        print(score)
+
+    def vmd_tube_tcl(self, file_name="drawTubes.tcl"):
+        with open(file_name, 'w') as tclFile:
+            tclFile.write("## beginning TCL script \n")
+
+            def draw_tube(segment,radius_value=10, color="cyan", resolution=5):
+                tclFile.write("## Tube being drawn... \n")
+                
+                contours = np.linspace(0,1, max(2,1+segment.num_nt//resolution) )
+                rs = [segment.contour_to_position(c) for c in contours]
+               
+                radius_value = str(radius_value)
+                tclFile.write("graphics top color {} \n".format(str(color)))
+                for i in range(len(rs)-2):
+                    r0 = rs[i]
+                    r1 = rs[i+1]
+                    filled = "yes" if i in (0,len(rs)-2) else "no"
+                    tclFile.write("graphics top cylinder {{ {} {} {} }} {{ {} {} {} }} radius {} resolution 30 filled {} \n".format(r0[0], r0[1], r0[2], r1[0], r1[1], r1[2], str(radius_value), filled))
+                    tclFile.write("graphics top sphere {{ {} {} {} }} radius {} resolution 30\n".format(r1[0], r1[1], r1[2], str(radius_value)))
+                r0 = rs[-2]
+                r0 = rs[-1]
+                tclFile.write("graphics top cylinder {{ {} {} {} }} {{ {} {} {} }} radius {} resolution 30 filled yes \n".format(r0[0], r0[1], r0[2], r1[0], r1[1], r1[2], str(radius_value)))
+
+            ## material
+            tclFile.write("graphics top materials on \n")
+            tclFile.write("graphics top material AOEdgy \n")
+            
+            ## iterate through the model segments
+            for s in self.segments:
+                if isinstance(s,DoubleStrandedSegment):
+                    tclFile.write("## dsDNA! \n")
+                    draw_tube(s,10,"cyan")
+                elif isinstance(s,SingleStrandedSegment):
+                    tclFile.write("## ssDNA! \n")
+                    draw_tube(s,3,"orange",resolution=1.5)
+                else:
+                    raise Exception ("your model includes beads that are neither ssDNA nor dsDNA")
+            ## tclFile complete
+            tclFile.close()
+
+    def vmd_cylinder_tcl(self, file_name="drawCylinders.tcl"):
+        #raise NotImplementedError
+        with open(file_name, 'w') as tclFile:
+            tclFile.write("## beginning TCL script \n")
+            def draw_cylinder(segment,radius_value=10,color="cyan"):
+                tclFile.write("## cylinder being drawn... \n")
+                r0 = segment.contour_to_position(0)
+                r1 = segment.contour_to_position(1)
+                
+                radius_value = str(radius_value)
+                color = str(color)
+                
+                tclFile.write("graphics top color {} \n".format(color))
+                tclFile.write("graphics top cylinder {{ {} {} {} }} {{ {} {} {} }} radius {} resolution 30 filled yes \n".format(r0[0], r0[1], r0[2], r1[0], r1[1], r1[2], radius_value))
+
+            ## material
+            tclFile.write("graphics top materials on \n")
+            tclFile.write("graphics top material AOEdgy \n")
+            
+            ## iterate through the model segments
+            for s in self.segments:
+                if isinstance(s,DoubleStrandedSegment):
+                    tclFile.write("## dsDNA! \n")
+                    draw_cylinder(s,10,"cyan")
+                elif isinstance(s,SingleStrandedSegment):
+                    tclFile.write("## ssDNA! \n")
+                    draw_cylinder(s,3,"orange")
+                else:
+                    raise Exception ("your model includes beads that are neither ssDNA nor dsDNA")
+            ## tclFile complete
+            tclFile.close()
diff --git a/mrdna/arbdmodel/ssdna_two_bead.py b/mrdna/arbdmodel/ssdna_two_bead.py
new file mode 100644
index 0000000000000000000000000000000000000000..40fb40e5537ac389048f6b81e72468b7b5987ffd
--- /dev/null
+++ b/mrdna/arbdmodel/ssdna_two_bead.py
@@ -0,0 +1,200 @@
+# -*- coding: utf-8 -*-
+import numpy as np
+import sys
+
+## Local imports
+from . import ArbdModel, ParticleType, PointParticle, Group, get_resource_path
+from .abstract_polymer import PolymerSection, AbstractPolymerGroup
+from .interactions import TabulatedPotential, HarmonicBond, HarmonicAngle, HarmonicDihedral
+from .coords import quaternion_to_matrix
+
+"""Define particle types"""
+
+## units "295 k K/(160 amu * 1.24/ps)" "AA**2/ns"
+## units "295 k K/(180 amu * 1.24/ps)" "AA**2/ns"
+_P = ParticleType("P",
+                 diffusivity = 1621,
+                 mass = 121,
+                 radius = 5,
+                 nts = 0.5      # made compatible with nbPot
+)
+
+_B = ParticleType("B",
+                 diffusivity = 1093,
+                 mass = 181,    # thymine
+                 radius = 3,                 
+                 nts = 0.5      # made compatible with nbPot
+)
+
+class DnaStrandFromPolymer(Group):
+    p = PointParticle(_P, (0,0,0), "P")
+    b = PointParticle(_B, (3,0,1), "B")
+    nt = Group( name = "nt", children = [p,b])
+    nt.add_bond( i=p, j=b, bond = get_resource_path('two_bead_model/BPB.dat'), exclude = True )
+
+    def __init__(self, polymer, **kwargs):
+        self.polymer = polymer
+        Group.__init__(self, **kwargs)
+        
+    def _clear_beads(self):
+        ...
+        
+    def _generate_beads(self):
+        nts = self.nts = self.children
+
+        for i in range(self.polymer.num_monomers):
+            c = self.polymer.monomer_index_to_contour(i)
+            r = self.polymer.contour_to_position(c)
+            o = self.polymer.contour_to_orientation(c)
+            
+            new = DnaStrandFromPolymer.nt.duplicate()
+            new.orientation = o
+            new.position = r
+            self.add(new)
+
+        ## Two consecutive nts 
+        for i in range(len(nts)-1):
+            p1,b1 = nts[i].children
+            p2,b2 = nts[i+1].children
+            self.add_bond( i=b1, j=p2, bond = get_resource_path('two_bead_model/BBP.dat'), exclude=True )
+            self.add_bond( i=p1, j=p2, bond = get_resource_path('two_bead_model/BPP.dat'), exclude=True )
+            self.add_angle( i=p1, j=p2, k=b2, angle = get_resource_path('two_bead_model/p1p2b2.dat') )
+            self.add_angle( i=b1, j=p2, k=b2, angle = get_resource_path('two_bead_model/b1p2b2.dat') )
+            self.add_dihedral( i=b1, j=p1, k=p2, l=b2, dihedral = get_resource_path('two_bead_model/b1p1p2b2.dat') )
+            self.add_exclusion( i=b1, j=b2 )
+            self.add_exclusion( i=p1, j=b2 )
+
+        ## Three consecutive nts 
+        for i in range(len(nts)-2):
+            p1,b1 = nts[i].children
+            p2,b2 = nts[i+1].children
+            p3,b3 = nts[i+2].children
+            self.add_angle( i=p1, j=p2, k=p3, angle = get_resource_path('two_bead_model/p1p2p3.dat') )
+            self.add_angle( i=b1, j=p2, k=p3, angle = get_resource_path('two_bead_model/b1p2p3.dat') )
+            self.add_dihedral( i=b1, j=p2, k=p3, l=b3, dihedral = get_resource_path('two_bead_model/b1p2p3b3.dat') )
+            self.add_exclusion( i=p1, j=p3 )
+            self.add_exclusion( i=b1, j=p3 )
+
+        ## Four consecutive nts 
+        for i in range(len(nts)-3):
+            p1,b1 = nts[i].children
+            p2,b2 = nts[i+1].children
+            p3,b3 = nts[i+2].children
+            p4,b4 = nts[i+3].children
+            self.add_dihedral( i=p1, j=p2, k=p3, l=p4, dihedral = get_resource_path('two_bead_model/p0p1p2p3.dat') )
+
+# def hybridize(strand1, strand2, parent=None, num_bp=None, start1=None, end2=None): 
+
+#     """ hybridize num_bp basepairs between strand1 and strand2,
+#     starting with nt at start1 and ending with nucleotide and end2 """
+
+#     num_nt1 = len(strand1.children)
+#     num_nt2 = len(strand2.children)
+
+#     if parent is None:
+#         assert(strand1.parent == strand2.parent)
+#         parent = strand1.parent
+
+#     if start1 is None:
+#         start1 = 0
+#     if end2 is None:
+#         end2 = num_nt2
+
+#     assert(start1 >= 0)
+#     assert(end2 > 0)
+#     assert(start1 < num_nt1)
+#     assert(end2 <= num_nt2)
+    
+#     if num_bp is None:
+#         num_bp = min(num_nt1-start1, end2)
+        
+#     if num_bp > num_nt1-start1:
+#         raise ValueError("Attempted to hybridize too many basepairs ({}) for strand1 ({})".format(num_bp,num_nt1-start1))
+#     if num_bp > end2:
+#         raise ValueError("Attempted to hybridize too many basepairs ({}) for strand1 ({})".format(num_bp,end2))
+
+#     nts1 = strand1.children[start1:start1+num_bp]
+#     nts2 = strand2.children[end2-num_bp:end2][::-1]
+#     assert( len(nts1) == len(nts2) )
+
+#     kAngle = 0.0274155          # 90 kcal_mol per radian**2 
+
+#     ## every bp
+#     for i in range(num_bp):
+#         p11,b11 = nts1[i].children
+#         p21,b21 = nts2[i].children
+#         parent.add_bond( i=b11, j=b21, bond=HarmonicBond(10,7.835) )
+#         parent.add_angle( i=p11, j=b11, k=b21, angle=HarmonicAngle(kAngle,162.0) )
+#         parent.add_angle( i=p21, j=b21, k=b11, angle=HarmonicAngle(kAngle,162.0) )
+
+#     ## every 2 bp
+#     for i in range(num_bp-1):
+#         p11,b11 = nts1[i].children
+#         p12,b12 = nts1[i+1].children
+#         p21,b21 = nts2[i].children
+#         p22,b22 = nts2[i+1].children
+
+#         parent.add_bond( i=b11, j=b22, bond=HarmonicBond(1,8.41) )
+#         parent.add_bond( i=b12, j=b21, bond=HarmonicBond(1,7.96) )
+#         parent.add_angle( i=p11, j=p12, k=b12, angle=HarmonicAngle(kAngle,87.0) )
+#         parent.add_angle( i=p22, j=p21, k=b11, angle=HarmonicAngle(kAngle,87.0) )
+
+#     ## every 3 bp
+#     for i in range(num_bp-2):
+#         p11,b11 = nts1[i].children
+#         p12,b12 = nts1[i+1].children
+#         p13,b13 = nts1[i+2].children
+#         p21,b21 = nts2[i].children
+#         p22,b22 = nts2[i+1].children
+#         p23,b23 = nts2[i+2].children
+
+#         parent.add_angle( i=p11, j=p12, k=p13, angle=HarmonicAngle(kAngle,150.0) )
+#         parent.add_angle( i=p21, j=p22, k=p23, angle=HarmonicAngle(kAngle,150.0) )
+
+class DnaModel(ArbdModel):
+    def __init__(self, polymers,
+                 DEBUG=False,
+                 **kwargs):
+
+        kwargs['timestep'] = 20e-6
+        kwargs['cutoff'] = 35
+        
+        self.polymer_group = AbstractPolymerGroup(polymers)
+        self.strands = [DnaStrandFromPolymer(p) for p in self.polymer_group.polymers]
+
+        ArbdModel.__init__(self, self.strands, **kwargs)
+
+        self.useNonbondedScheme( TabulatedPotential(get_resource_path('two_bead_model/NBBB.dat')), typeA=_B, typeB=_B )
+        self.useNonbondedScheme( TabulatedPotential(get_resource_path('two_bead_model/NBPB.dat')), typeA=_P, typeB=_B )
+        self.useNonbondedScheme( TabulatedPotential(get_resource_path('two_bead_model/NBPP.dat')), typeA=_P, typeB=_P )
+
+        self.generate_beads()
+                
+    def generate_beads(self):
+        for s in self.strands:
+            s._generate_beads()
+        
+
+
+if __name__ == "__main__":
+    strands = []
+    for i in range(5,60,5):
+
+        strands.extend( [strand.duplicate() for j in range(int(round(600/i**1.2)))] )
+
+    ## Randomly place strands through system
+    model = ArbdModel( strands, dimensions=(200, 200, 200) )
+
+    old_schemes = model.nbSchemes
+    model.nbSchemes = []
+    model.useNonbondedScheme( TabulatedPotential(get_resource_path('two_bead_model/NBBB.dat')), typeA=B, typeB=B )
+    model.useNonbondedScheme( TabulatedPotential(get_resource_path('two_bead_model/NBPB.dat')), typeA=P, typeB=B )
+    model.useNonbondedScheme( TabulatedPotential(get_resource_path('two_bead_model/NBPP.dat')), typeA=P, typeB=P )
+    model.nbSchemes.extend(old_schemes)
+
+    for s in strands:
+        s.orientation = randomOrientation()
+        s.position = np.array( [(a-0.5)*b for a,b in 
+                                zip( np.random.uniform(size=3), model.dimensions )] )
+
+    model.simulate( output_name = 'many-strands', output_period=1e4, num_steps=1e6 )
diff --git a/mrdna/arbdmodel/version.py b/mrdna/arbdmodel/version.py
new file mode 100644
index 0000000000000000000000000000000000000000..4a416a5aee20abe72870b8e585b402974d223eea
--- /dev/null
+++ b/mrdna/arbdmodel/version.py
@@ -0,0 +1,150 @@
+# -*- coding: utf-8 -*-
+# Author: Douglas Creager <dcreager@dcreager.net>
+# This file is placed into the public domain.
+
+# Calculates the current version number.  If possible, this is the
+# output of “git describe”, modified to conform to the versioning
+# scheme that setuptools uses.  If “git describe” returns an error
+# (most likely because we're in an unpacked copy of a release tarball,
+# rather than in a git working copy), then we fall back on reading the
+# contents of the RELEASE-VERSION file.
+#
+# To use this script, simply import it your setup.py file, and use the
+# results of get_git_version() as your package version:
+#
+# from version import *
+#
+# setup(
+#     version=get_git_version(),
+#     .
+#     .
+#     .
+# )
+#
+#
+# This will automatically update the RELEASE-VERSION file, if
+# necessary.  Note that the RELEASE-VERSION file should *not* be
+# checked into git; please add it to your top-level .gitignore file.
+#
+# You'll probably want to distribute the RELEASE-VERSION file in your
+# sdist tarballs; to do this, just create a MANIFEST.in file that
+# contains the following line:
+#
+#   include RELEASE-VERSION
+
+__all__ = ("get_version")
+
+from pathlib import Path
+import subprocess
+from subprocess import Popen, PIPE
+
+_version_file = Path(__file__).parent / "RELEASE-VERSION"
+
+
+def check_git_repository():
+    try:
+        remotes = subprocess.check_output(['git', 'remote', '-v'], stderr=subprocess.STDOUT)
+        return b'arbdmodel.git' in remotes
+    except:
+        return False   
+
+def call_git_describe(abbrev):
+    try:
+        p = Popen(['git', 'describe', '--tags', '--abbrev=%d' % abbrev],
+                  stdout=PIPE, stderr=PIPE)
+        p.stderr.close()
+        line = p.stdout.readlines()[0]
+        return line.strip().decode('utf-8')
+
+    except:
+        return None
+
+
+def is_dirty():
+    try:
+        p = Popen(["git", "diff-index", "--name-only", "HEAD"],
+                  stdout=PIPE, stderr=PIPE)
+        p.stderr.close()
+        lines = p.stdout.readlines()
+        return len(lines) > 0
+    except:
+        return False
+
+
+def read_release_version():
+    try:
+        f = open(_version_file, "r")
+
+        try:
+            version = f.readlines()[0]
+            return version.strip()
+
+        finally:
+            f.close()
+
+    except:
+        return None
+
+
+def write_release_version(version):
+    f = open(_version_file, "w")
+    f.write("%s\n" % version)
+    f.close()
+
+def get_version(abbrev=7):
+    # Read in the version that's currently in RELEASE-VERSION.
+
+    
+    release_version = read_release_version()
+
+    if not check_git_repository():
+        return release_version
+        # raise Exception(__function__ +" called from outside a version controlled source repository")
+
+
+    # First try to get the current version using “git describe”.
+
+    split_version = call_git_describe(abbrev).split("-")
+    version = split_version[0]
+    if len(split_version) > 1 and int(split_version[-2]) > 0:
+        version += ".dev{}".format(int(split_version[-2]))
+
+
+    # If that doesn't work, fall back on the value that's in
+    # RELEASE-VERSION.
+
+    if version is None:
+        version = release_version
+
+    # If we still don't have anything, that's an error.
+
+    if version is None:
+        raise ValueError("Cannot find the version number!")
+
+    # If the current version is different from what's in the
+    # RELEASE-VERSION file, update the file to be current.
+
+    if version != release_version:
+        write_release_version(version)
+
+    # Finally, return the current version.
+
+    return version
+
+
+if __name__ == "__main__":
+    print( get_version() )
+
+def read_version_file(filename):
+    with open(filename) as fh:
+        version = fh.readlines()[0].strip()
+    return version
+        
+
+try:
+    version = read_version_file(_version_file)
+except:
+    try:
+        version = read_version_file(_version_file)
+    except:
+        version = "Unknown"
diff --git a/mrdna/coords.py b/mrdna/coords.py
index 41628e83501c17098094fc12b7d4d4e6594ebcb6..363ab96a158c1f90b3a8590ee49947089a8fecf1 100644
--- a/mrdna/coords.py
+++ b/mrdna/coords.py
@@ -1,204 +1,4 @@
-import numpy as np
-from scipy.optimize import newton
+from .arbdmodel.coords import *
 
-def minimizeRmsd(coordsB, coordsA, weights=None, maxIter=100):
-    ## Going through many iterations wasn't really needed
-    tol = 1
-    count = 0
-
-    R = np.eye(3)
-    comB = np.zeros([3,])
-    cNext = coordsB
-
-    while tol > 1e-6:
-        q,cB,comA = _minimizeRmsd(cNext,coordsA, weights)
-        R = R.dot(quaternion_to_matrix(q))
-        assert( np.all(np.isreal( R )) )
-
-        comB += cB
-        cLast = cNext
-        cNext = (coordsB-comB).dot(R)
-
-        tol = np.sum(((cNext-cLast)**2)[:]) / np.max(np.shape(coordsB))
-        if count > maxIter:
-            Exception("Exceeded maxIter (%d)" % maxIter)
-        count += 1
-
-    print("%d iterations",count)
-    return R, comB, comA
-
-
-def minimizeRmsd(coordsB, coordsA, weights=None):
-    q,comA,comB = _minimizeRmsd(coordsB, coordsA, weights)
-    assert( np.all(np.isreal( q )) )
-    return quaternion_to_matrix(q),comA,comB
-
-
-## http://onlinelibrary.wiley.com/doi/10.1002/jcc.21439/full
-def _minimizeRmsd(coordsB, coordsA, weights=None):
-    A = coordsA
-    B = coordsB
-
-    shapeA,shapeB = [np.shape(X) for X in (A,B)]
-    for s in (shapeA,shapeB):  assert( len(s) == 2 )
-
-    A,B = [X.T if s[1] > s[0] else X for X,s in zip([A,B],(shapeA,shapeB))] # TODO: print warning
-
-    shapeA,shapeB = [np.shape(X) for X in (A,B)]
-    assert( shapeA == shapeB )
-    for X,s in zip((A,B),(shapeA,shapeB)):
-        assert( s[1] == 3 and s[0] >= s[1] )
-    
-    # if weights is None: weights = np.ones(len(A))
-    if weights is None:
-        comA,comB = [np.mean( X, axis=0 ) for X in (A,B)]
-    else:
-        assert( len(weights[:]) == len(B) )
-        W = np.diag(weights)
-        comA,comB = [np.sum( W.dot(X), axis=0 ) / np.sum(W) for X in (A,B)]
-
-    A = np.array( A-comA )
-    B = np.array( B-comB )
-
-    if weights is None:
-        s = A.T.dot(B)
-    else:
-        s = A.T.dot(W.dot(B))
-    
-    sxx,sxy,sxz = s[0,:]
-    syx,syy,syz = s[1,:]
-    szx,szy,szz = s[2,:]
-    
-    K = [[ sxx+syy+szz, syz-szy, szx-sxz, sxy-syx],
-         [syz-szy,  sxx-syy-szz, sxy+syx, sxz+szx],
-         [szx-sxz, sxy+syx, -sxx+syy-szz, syz+szy],
-         [sxy-syx, sxz+szx, syz+szy, -sxx-syy+szz]]
-    K = np.array(K)
-
-    # GA = np.trace( A.T.dot(W.dot(A)) )
-    # GB = np.trace( B.T.dot(W.dot(B)) )
-        
-    ## Finding GA/GB can be done more quickly
-    # I = np.eye(4)
-    # x0 = (GA+GB)*0.5
-    # vals = newtoon(lambda x: np.det(K-x*I), x0 = x0)
-
-    vals, vecs = np.linalg.eig(K)
-    i = np.argmax(vals)
-    q = vecs[:,i]
-
-    # RMSD = np.sqrt( (GA+GB-2*vals[i]) / len(A) )
-    # print("CHECK:", K.dot(q)-vals[i]*q )
-    return q, comB, comA
-
-def quaternion_to_matrix(q):
-    assert(len(q) == 4)
-
-    ## It looks like the wikipedia article I used employed a less common convention for q (see below
-    ## http://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions#Rotation_matrix_.E2.86.94_quaternion
-    # q1,q2,q3,q4 = q
-    # R = [[1-2*(q2*q2 + q3*q3),    2*(q1*q2 - q3*q4),    2*(q1*q3 + q2*q4)],
-    #      [  2*(q1*q2 + q3*q4),  1-2*(q1*q1 + q3*q3),    2*(q2*q3 - q1*q4)],
-    #      [  2*(q1*q3 - q2*q4),    2*(q1*q4 + q2*q3),  1-2*(q2*q2 + q1*q1)]]
-
-    q = q / np.linalg.norm(q)
-    q0,q1,q2,q3 = q
-    R = [[1-2*(q2*q2 + q3*q3),    2*(q1*q2 - q3*q0),    2*(q1*q3 + q2*q0)],
-         [  2*(q1*q2 + q3*q0),  1-2*(q1*q1 + q3*q3),    2*(q2*q3 - q1*q0)],
-         [  2*(q1*q3 - q2*q0),    2*(q1*q0 + q2*q3),  1-2*(q2*q2 + q1*q1)]]
-
-    return np.array(R)
-
-def quaternion_from_matrix( R ):
-    e1 = R[0]
-    e2 = R[1]
-    e3 = R[2]
-    
-    # d1 = 0.5 * np.sqrt( 1+R[0,0]+R[1,1]+R[2,2] )
-    # d2 = 0.5 * np.sqrt( 1+R[0,0]-R[1,1]-R[2,2] )
-    # d2 = 0.5 * np.sqrt( 1+R[0,0]-R[1,1]-R[2,2] )
-    # d2 = 0.5 * np.sqrt( 1+R[0,0]-R[1,1]-R[2,2] )
-
-    d1 = 1+R[0,0]+R[1,1]+R[2,2]
-    d2 = 1+R[0,0]-R[1,1]-R[2,2]
-    d3 = 1-R[0,0]+R[1,1]-R[2,2]
-    d4 = 1-R[0,0]-R[1,1]+R[2,2]
-    
-    maxD = max((d1,d2,d3,d4))
-    d = 0.5 / np.sqrt(maxD)
-
-    if d1 == maxD:
-        return np.array(( 1.0/(4*d),
-                          d * (R[2,1]-R[1,2]),
-                          d * (R[0,2]-R[2,0]),
-                          d * (R[1,0]-R[0,1]) ))
-    elif d2 == maxD:
-        return np.array(( d * (R[2,1]-R[1,2]),
-                          1.0/(4*d),
-                          d * (R[0,1]+R[1,0]),
-                          d * (R[0,2]+R[2,0]) ))
-    elif d3 == maxD:
-        return np.array(( d * (R[0,2]-R[2,0]),
-                          d * (R[0,1]+R[1,0]),
-                          1.0/(4*d),
-                          d * (R[1,2]+R[2,1]) ))
-    elif d4 == maxD:
-        return np.array(( d * (R[1,0]-R[0,1]),
-                          d * (R[0,2]+R[2,0]),
-                          d * (R[1,2]+R[2,1]),
-                          1.0/(4*d) ))
-
-def rotationAboutAxis(axis,angle, normalizeAxis=True):
-    if normalizeAxis: axis = axis / np.linalg.norm(axis)
-    angle = angle * 0.5 * np.pi/180
-    cos = np.cos( angle )
-    sin = np.sin( angle )
-    q = [cos] + [sin*x for x in axis]
-    return quaternion_to_matrix(q)
-
-def readArbdCoords(fname):
-    coords = []
-    with open(fname) as fh:
-        for line in fh:
-            coords.append([float(x) for x in line.split()[1:]])
-    return np.array(coords)
-
-def readAvgArbdCoords(psf,pdb,dcd,rmsdThreshold=3.5):
-    import MDAnalysis as mda
-
-    usel = mda.Universe(psf, dcd)
-    sel = usel.select_atoms("name D*")
-
-    # r0 = ref.xyz[0,ids,:]
-    ts = usel.trajectory[-1]
-    r0 = sel.positions
-    pos = []
-    for t in range(ts.frame-1,-1,-1):
-        usel.trajectory[t]
-        R,comA,comB = minimizeRmsd(sel.positions,r0)
-        r = np.array( [(r-comA).dot(R)+comB for r in sel.positions] )
-        rmsd = np.mean( (r-r0)**2 )
-        r = np.array( [(r-comA).dot(R)+comB for r in usel.atoms.positions] )
-        pos.append( r )
-        if rmsd > rmsdThreshold**2:
-            break
-    t0=t+1
-    print( "Averaging coordinates in %s after frame %d" % (dcd, t0) )
-
-    pos = np.mean(pos, axis=0)
-    return pos
-
-def unit_quat_conversions():
-    for axis in [[0,0,1],[1,1,1],[1,0,0],[-1,-2,0]]:
-        for angle in np.linspace(-180,180,10):
-            R = rotationAboutAxis(axis, angle)
-            R2 = quaternion_to_matrix( quaternion_from_matrix( R ) )
-            if not np.all( np.abs(R-R2) < 0.01 ):
-                import pdb
-                pdb.set_trace()
-                quaternion_to_matrix( quaternion_from_matrix( R ) )
-
-
-if __name__ == "__main__":
-    unit_quat_conversions()
-            
+from sys import stderr
+stderr.write("WARNING: the module 'mrdna.coords' has been deprecated. Please change your scripts to use 'mrdna.arbdmodel.coords'\n")
diff --git a/mrdna/model/CanonicalNucleotideAtoms.py b/mrdna/model/CanonicalNucleotideAtoms.py
index fa0a2e98ca6bbe1ca19c1f84acd3858216058e52..7b2dcdce5f172e80aad27eeaa926ed9e17bf51ff 100644
--- a/mrdna/model/CanonicalNucleotideAtoms.py
+++ b/mrdna/model/CanonicalNucleotideAtoms.py
@@ -1,8 +1,8 @@
 import json
 import numpy as np
 import copy
-from ..coords import rotationAboutAxis
-from .arbdmodel import Group, PointParticle, ParticleType
+from ..arbdmodel.coords import rotationAboutAxis
+from ..arbdmodel import Group, PointParticle, ParticleType
 from .. import get_resource_path
 
 seqComplement = dict(A='T',G='C')
diff --git a/mrdna/model/arbdmodel.py b/mrdna/model/arbdmodel.py
index 0a358264035998e34dc0ebbd7d07fe1a7cdf11ab..8219ed633b23f07b79959f0bb812f2a772a91eaf 100644
--- a/mrdna/model/arbdmodel.py
+++ b/mrdna/model/arbdmodel.py
@@ -1,1499 +1,5 @@
-# -*- coding: utf-8 -*-
-from pathlib import Path
-import numpy as np
-from copy import copy, deepcopy
-from inspect import ismethod
+from ..arbdmodel import *
 
-# from datetime import datetime
-# from math import pi,sqrt,exp,floor
-# from scipy.special import erf
-# import scipy.optimize as opt
-import os, sys, subprocess
+from sys import stderr
+stderr.write("WARNING: the module 'mrdna.model.arbdmodel' has been deprecated. Please change your scripts to use 'mrdna.arbdmodel'\n")
 
-
-## Abstract classes
-class Transformable():
-    def __init__(self, position, orientation=None):
-        self.position = np.array(position)
-        if orientation is not None:
-            orientation = np.array(orientation)
-        self.orientation = orientation
-
-    def transform(self, R = ((1,0,0),(0,1,0),(0,0,1)),
-                  center = (0,0,0), offset = (0,0,0)):
-
-        R,center,offset = [np.array(x) for x in (R,center,offset)]
-
-        self.position = R.dot(self.position-center)+center+offset
-                
-        if self.orientation is not None:
-            ## TODO: what if self.orientation is taken from parent?!
-            self.orientation = self.orientation.dot(R)
-        ...        
-
-    def collapsedPosition(self):
-        # print("collapsedPosition called", type(self), self.name)
-        if isinstance(self, Child):
-            # print(self.parent, isinstance(self.parent,Transformable))
-            if isinstance(self.parent, Transformable):
-                return self.applyOrientation(self.position) + self.parent.collapsedPosition()
-            
-                # if self.parent.orientation is not None:
-                #     return self.parent.collapsedOrientation().dot(self.position) + self.parent.collapsedPosition()
-        return np.array(self.position) # return a copy
-                
-    def applyOrientation(self,obj):
-        # print("applyOrientation called", self.name, obj)
-        if isinstance(self, Child):
-            # print( self.orientation, self.orientation is not None, None is not None )
-            # if self.orientation is not None:
-            #     # print("applyOrientation applying", self, self.name, self.orientation)
-            #     obj = self.orientation.dot(obj)
-            if isinstance(self.parent, Transformable):
-                if self.parent.orientation is not None:
-                    obj = self.parent.orientation.dot(obj)
-                obj = self.parent.applyOrientation(obj)
-        # print("applyOrientation returning", self.name, obj)
-        return obj
-
-class Parent():
-    def __init__(self, children=None, remove_duplicate_bonded_terms=False):
-        self.children = []
-        if children is not None:
-            for x in children:
-                self.add(x)
-        
-        self.remove_duplicate_bonded_terms = remove_duplicate_bonded_terms
-        self.bonds = []
-        self.angles = []
-        self.dihedrals = []
-        self.impropers = []
-        self.exclusions = []
-
-        ## TODO: self.cacheInvalid = True # What will be in the cache?
-
-
-    def add(self,x):
-        ## TODO: check the parent-child tree to make sure there are no cycles
-        if not isinstance(x,Child):
-            raise Exception('Attempted to add an object to a group that does not inherit from the "Child" type')
-
-        if x.parent is not None and x.parent is not self:
-            raise Exception("Child {} already belongs to some group".format(x))
-        x.parent = self
-        self.children.append(x)
-
-    def clear_all(self, keep_children=False):
-        if keep_children == False:
-            for x in self.children:
-                x.parent = None
-            self.children = []
-        self.bonds = []
-        self.angles = []
-        self.dihedrals = []
-        self.impropers = []
-        self.exclusions = []
-
-    def remove(self,x):
-        if x in self.children:
-            self.children.remove(x)
-            x.parent = None
-
-    def add_bond(self, i,j, bond, exclude=False):
-        assert( i is not j )
-        ## TODO: how to handle duplicating and cloning bonds
-        # beads = [b for b in self]
-        # for b in (i,j): assert(b in beads)
-        self.bonds.append( (i,j, bond, exclude) )
-
-    def add_angle(self, i,j,k, angle):
-        assert( len(set((i,j,k))) == 3 )
-        # beads = [b for b in self]
-        # for b in (i,j,k): assert(b in beads)
-        self.angles.append( (i,j,k, angle) )
-
-    def add_dihedral(self, i,j,k,l, dihedral):
-        assert( len(set((i,j,k,l))) == 4 )
-
-        # beads = [b for b in self]
-        # for b in (i,j,k,l): assert(b in beads)
-        self.dihedrals.append( (i,j,k,l, dihedral) )
-
-    def add_improper(self, i,j,k,l, dihedral):
-        # beads = [b for b in self]
-        # for b in (i,j,k,l): assert(b in beads)
-        self.impropers.append( (i,j,k,l, dihedral) )
-
-    def add_exclusion(self, i,j):
-        ## TODO: how to handle duplicating and cloning bonds
-        ## TODO: perform following check elsewhere
-        # beads = [b for b in self]
-        # for b in (i,j): assert(b in beads)
-        self.exclusions.append( (i,j) )
-
-    def get_restraints(self):
-        ret = []
-        for c in self.children:
-            ret.extend( c.get_restraints() )
-        return ret
-
-    def get_bonds(self):
-        ret = self.bonds
-        for c in self.children:
-            if isinstance(c,Parent): ret.extend( c.get_bonds() )
-        if self.remove_duplicate_bonded_terms:
-            return list(set(ret))
-        else:
-            return ret
-
-
-    def get_angles(self):
-        ret = self.angles
-        for c in self.children:
-            if isinstance(c,Parent): ret.extend( c.get_angles() )
-        if self.remove_duplicate_bonded_terms:
-            return list(set(ret))
-        else:
-            return ret
-
-    def get_dihedrals(self):
-        ret = self.dihedrals
-        for c in self.children:
-            if isinstance(c,Parent): ret.extend( c.get_dihedrals() )
-        if self.remove_duplicate_bonded_terms:
-            return list(set(ret))
-        else:
-            return ret
-
-    def get_impropers(self):
-        ret = self.impropers
-        for c in self.children:
-            if isinstance(c,Parent): ret.extend( c.get_impropers() )
-        if self.remove_duplicate_bonded_terms:
-            return list(set(ret))
-        else:
-            return ret
-
-    def get_exclusions(self):
-        ret = self.exclusions
-        for c in self.children:
-            if isinstance(c,Parent): ret.extend( c.get_exclusions() )
-        if self.remove_duplicate_bonded_terms:
-            return list(set(ret))
-        else:
-            return ret
-
-    ## Removed because prohibitively slow
-    # def remove_duplicate_terms(self):
-    #     for key in "bonds angles dihedrals impropers exclusions".split():
-    #         self.remove_duplicate_item(key)
-
-    # def remove_duplicate_item(self, dict_key, existing=None):
-    #     if existing is None: existing = []
-    #     ret = [i for i in list(set(self.__dict__[dict_key])) if i not in existing]
-    #     self.__dict__[dict_key] = ret
-    #     existing.extend(ret)
-    #     for c in self.children:
-    #         if isinstance(c,Parent): 
-    #             ret = ret + c.remove_duplicate_item(dict_key, existing)
-    #     return ret
-        
-
-    def __iter__(self):
-        ## TODO: decide if this is the nicest way to do it!
-        """Depth-first iteration through tree"""
-        for x in self.children:
-            if isinstance(x,Parent):
-                if isinstance(x,Clone) and not isinstance(x.get_original_recursively(),Parent):
-                    yield x
-                else:
-                    for y in x:
-                        yield y
-            else:
-                yield x    
-
-    def __len__(self):
-        l = 0
-        for x in self.children:
-            if isinstance(x,Parent):
-                l += len(x)
-            else:
-                l += 1
-        return l
-        
-    def __getitem__(self, i):
-        return self.children[i]
-    
-    def __setitem__(self, i, val):
-        x = self.children[i]
-        x.parent = None
-        val.parent = self
-        self.children[i] = val
-        
-class Child():
-    def __init__(self, parent=None):
-        self.parent = parent
-        if parent is not None:
-            assert( isinstance(parent, Parent) )
-            parent.children.append(self)
-
-    def __getattr__(self, name):
-        """
-        Try to get attribute from the parent
-        """
-        # if self.parent is not None:
-        if "parent" not in self.__dict__ or self.__dict__["parent"] is None or name is "children":
-            raise AttributeError("'{}' object has no attribute '{}'".format(type(self).__name__, name))
-
-        ## TODO: determine if there is a way to avoid __getattr__ if a method is being looked up  
-        try:
-            ret = getattr(self.parent,name)
-        except:
-            raise AttributeError("'{}' object has no attribute '{}'".format(type(self).__name__, name))
-        if ismethod(ret):
-            raise AttributeError("'{}' object has no method '{}'".format(type(self).__name__, name))
-        return ret 
-
-            
-    # def __getstate__(self):
-    #     print("Child getstate called", self)
-    #     print(self.__dict__)
-    #     return (self.__dict__,)
-
-    # def __setstate__(self, state):
-    #     self.__dict__, = state
-
-class Clone(Transformable, Parent, Child):
-    def __init__(self, original, parent=None,
-                 position = None,
-                 orientation = None):
-        if position is None and original.position is not None:
-            position = np.array( original.position )
-        if orientation is None and original.orientation is not None:
-            orientation = np.array( original.orientation )
-        if parent is None:
-            parent = original.parent
-        self.original = original
-        Child.__init__(self, parent)        
-        Transformable.__init__(self, position, orientation)        
-
-        ## TODO: keep own bond_list, etc, update when needed original changes
-
-        if "children" in original.__dict__ and len(original.children) > 0:
-            self.children = [Clone(c, parent = self) for c in original.children]
-        else:
-            self.children = []
-
-    def get_original_recursively(self):
-        if isinstance(self.original, Clone):
-            return self.original.get_original_recursively()
-        else:
-            return self.original
-
-    def __getattr__(self, name):
-        """
-        Try to get attribute from the original without descending the tree heirarchy, then look up parent
-
-        TODO: handle PointParticle lookups into ParticleType
-        """
-        # print("Clone getattr",name)
-        if name in self.original.__dict__:
-            return self.original.__dict__[name]
-        else:
-            if "parent" not in self.__dict__ or self.__dict__["parent"] is None:
-                raise AttributeError("'{}' object has no attribute '{}'".format(type(self).__name__, name))
-            return getattr(self.parent, name)
-        
-
-## Particle classes
-class ParticleType():
-    """Class that hold common attributes that particles can point to"""
-
-    excludedAttributes = ("idx","type_",
-                          "position",
-                          "children",
-                          "parent", "excludedAttributes",
-    )
-
-    def __init__(self, name, charge=0, **kargs):
-        # parent = None
-        # if "parent" in kargs: parent = kargs["parent"]
-        # Child.__init__(self, parent)
-
-        self.name        = name
-        self.charge = charge
-        for key in ParticleType.excludedAttributes:
-            assert( key not in kargs )
-
-        for key,val in kargs.items():
-            self.__dict__[key] = val
-
-    def __hash_key(self):
-        l = [self.name,self.charge]
-        for keyval in sorted(self.__dict__.items()):
-            if isinstance(keyval[1], list): keyval = (keyval[0],tuple(keyval[1]))
-            l.extend(keyval)
-        return tuple(l)
-
-    def __hash__(self):
-        return hash(self.__hash_key())
-    
-    def _equal_check(a,b):
-        if a.name == b.name:
-            if a.__hash_key() != b.__hash_key():
-                raise Exception("Two different ParticleTypes have same 'name' attribute")
-
-    def __eq__(a,b):
-        a._equal_check(b)
-        return a.name == b.name
-    def __lt__(a,b):
-        a._equal_check(b)
-        return a.name < b.name
-    def __le__(a,b):
-        a._equal_check(b)
-        return a.name <= b.name
-    def __gt__(a,b):
-        a._equal_check(b)
-        return a.name > b.name
-    def __ge__(a,b):
-        a._equal_check(b)
-        return a.name >= b.name
-    
-
-class PointParticle(Transformable, Child):
-    def __init__(self, type_, position, name="A", **kwargs):
-        parent = None
-        if 'parent' in kwargs:
-            parent = kwargs['parent']
-        Child.__init__(self, parent=parent)
-        Transformable.__init__(self,position)
-
-        self.type_    = type_                
-        self.idx     = None
-        self.name = name
-        self.counter = 0
-        self.restraints = []
-
-        for key,val in kwargs.items():
-            self.__dict__[key] = val
-        
-    def add_restraint(self, restraint):
-        ## TODO: how to handle duplicating and cloning bonds
-        self.restraints.append( restraint )
-
-    def get_restraints(self):
-        return [(self,r) for r in self.restraints]
-
-
-    def __getattr__(self, name):
-        """
-        First try to get attribute from the parent, then type_
-        
-        Note that this data structure seems to be fragile, can result in stack overflow
-        
-        """
-        # return Child.__getattr__(self,name)
-        try:
-            return Child.__getattr__(self,name)
-        except Exception as e:
-            if 'type_' in self.__dict__:
-                return getattr(self.type_, name)
-            else:
-                raise AttributeError("'{}' object has no attribute '{}'".format(type(self).__name__, name))
-
-    def _get_psfpdb_dictionary(self):
-        p = self
-        try:
-            segname = p.segname
-        except:
-            segname = "A"
-        try:
-            resname = p.resname
-        except:
-            resname = p.name[:3]
-        try:
-            resid = p.resid
-        except:
-            resid = p.idx+1
-
-        try:
-            occ = p.occupancy
-        except:
-            occ = 0
-        try:
-            beta = p.beta
-        except:
-            beta = 0
-
-        data = dict(segname = segname,
-                    resname = resname,
-                    name = str(p.name)[:4],
-                    chain = "A",
-                    resid = int(resid),
-                    idx = p.idx+1,
-                    type = p.type_.name[:4],
-                    charge = p.charge,
-                    mass = p.mass,
-                    occupancy = occ,
-                    beta = beta
-                )
-        return data
-
-
-class Group(Transformable, Parent, Child):
-
-    def __init__(self, name=None, children = None, parent=None, 
-                 position = np.array((0,0,0)),
-                 orientation = np.array(((1,0,0),(0,1,0),(0,0,1))),
-                 remove_duplicate_bonded_terms = False,
-                 **kwargs):
-
-        Transformable.__init__(self, position, orientation)
-        Child.__init__(self, parent) # Initialize Child first
-        Parent.__init__(self, children, remove_duplicate_bonded_terms)
-        self.name = name
-        self.isClone = False
-
-        for key,val in kwargs.items():
-            self.__dict__[key] = val
-
-
-    def clone(self):
-        return Clone(self)
-        g = copy(self)
-        g.isClone = True        # TODO: use?
-        g.children = [copy(c) for c in g.children]
-        for c in g.children:
-            c.parent = g
-        return g
-        g = Group(position = self.position,
-                  orientation = self.orientation)
-        g.children = self.children # lists point to the same object
-
-    def duplicate(self):
-        new = deepcopy(self)
-        for c in new.children:
-            c.parent = new
-        return new
-        # Group(position = self.position,
-        #       orientation = self.orientation)
-        # g.children = deepcopy self.children.deepcopy() # lists are the same object
-
-    ## TODO override deepcopy so parent can be excluded from copying?
-        
-    # def __getstate__(self):
-    #     return (self.children, self.parent, self.position, self.orientation)
-
-    # def __setstate__(self, state):
-    #     self.children, self.parent, self.position, self.orientation = state
-
-        
-class PdbModel(Transformable, Parent):
-
-    def __init__(self, children=None, dimensions=None, remove_duplicate_bonded_terms=False):
-        Transformable.__init__(self,(0,0,0))
-        Parent.__init__(self, children, remove_duplicate_bonded_terms)
-        self.dimensions = dimensions
-        self.particles = [p for p in self]
-        self.cacheInvalid = True
-
-    def _updateParticleOrder(self):
-        pass
-
-    def writePdb(self, filename, beta_from_fixed=False):
-        if self.cacheInvalid:
-            self._updateParticleOrder()
-        with open(filename,'w') as fh:
-            ## Write header
-            fh.write("CRYST1{:>9.3f}{:>9.3f}{:>9.3f}  90.00  90.00  90.00 P 1           1\n".format( *self.dimensions ))
-
-            ## Write coordinates
-            formatString = "ATOM {idx:>6.6s} {name:^4.4s} {resname:3.3s} {chain:1.1s}{resid:>5.5s}   {x:8.8s}{y:8.8s}{z:8.8s}{occupancy:6.2f}{beta:6.2f}  {charge:2d}{segname:>6s}\n"
-            for p in self.particles:
-                ## http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM
-                data = p._get_psfpdb_dictionary()
-                idx = data['idx']
-
-                if np.log10(idx) >= 5:
-                    idx = " *****"
-                else:
-                    idx = "{:>6d}".format(idx)
-                data['idx'] = idx
-
-                if beta_from_fixed:
-                    data['beta'] = 1 if 'fixed' in p.__dict__ else 0
-
-                pos = p.collapsedPosition()
-                dig = [max(int(np.log10(np.abs(x)+1e-6)//1),0)+1 for x in pos]
-                for d in dig: assert( d <= 7 )
-                # assert( np.all(dig <= 7) )
-                fs = ["{: %d.%df}" % (8,7-d) for d in dig]
-                x,y,z = [f.format(x) for f,x in zip(fs,pos)] 
-                data['x'] = x
-                data['y'] = y
-                data['z'] = z
-                assert(data['resid'] < 1e5)
-                data['charge'] = int(data['charge'])
-                data['resid'] = "{:<4d}".format(data['resid'])
-                fh.write( formatString.format(**data) )
-
-        return
-        
-    def writePsf(self, filename):
-        if self.cacheUpToDate == False:
-            self._updateParticleOrder()
-        with open(filename,'w') as fh:
-            ## Write header
-            fh.write("PSF NAMD\n\n") # create NAMD formatted psf
-            fh.write("{:>8d} !NTITLE\n\n".format(0))
-            
-            ## ATOMS section
-            fh.write("{:>8d} !NATOM\n".format(len(self.particles)))
-
-            ## From vmd/plugins/molfile_plugin/src/psfplugin.c
-            ## "%d %7s %10s %7s %7s %7s %f %f"
-            formatString = "{idx:>8d} {segname:7.7s} {resid:<10.10s} {resname:7.7s}" + \
-                           " {name:7.7s} {type:7.7s} {charge:f} {mass:f}\n"
-            for p in self.particles:
-                data = p._get_psfpdb_dictionary()
-                data['resid'] = "%d%c%c" % (data['resid']," "," ") # TODO: work with large indices
-                fh.write( formatString.format(**data) )
-            fh.write("\n")
-
-            ## Write out bonds
-            bonds = self.get_bonds()
-            fh.write("{:>8d} !NBOND\n".format(len(bonds)))
-            counter = 0
-            for p1,p2,b,ex in bonds:
-                fh.write( "{:>8d}{:>8d}".format(p1.idx+1,p2.idx+1) )
-                counter += 1
-                if counter == 4:
-                    fh.write("\n")
-                    counter = 0
-                else:
-                    fh.write(" ")
-            fh.write("\n" if counter == 0 else "\n\n")
-
-            ## Write out angles
-            angles = self.get_angles()
-            fh.write("{:>8d} !NTHETA\n".format(len(angles)))
-            counter = 0
-            for p1,p2,p3,a in angles:
-                fh.write( "{:>8d}{:>8d}{:>8d}".format(p1.idx+1,p2.idx+1,p3.idx+1) )
-                counter += 1
-                if counter == 3:
-                    fh.write("\n")
-                    counter = 0
-                else:
-                    fh.write(" ")
-            fh.write("\n" if counter == 0 else "\n\n")
-
-            ## Write out dihedrals
-            dihedrals = self.get_dihedrals()
-            fh.write("{:>8d} !NPHI\n".format(len(dihedrals)))
-            counter = 0
-            for p1,p2,p3,p4,a in dihedrals:
-                fh.write( "{:>8d}{:>8d}{:>8d}{:>8d}".format(p1.idx+1,p2.idx+1,p3.idx+1,p4.idx+1) )
-                counter += 1
-                if counter == 2:
-                    fh.write("\n")
-                    counter = 0
-                else:
-                    fh.write(" ") 
-            fh.write("\n" if counter == 0 else "\n\n")
-
-            ## Write out impropers
-            impropers = self.get_impropers()
-            fh.write("{:>8d} !NIMPHI\n".format(len(impropers)))
-            counter = 0
-            for p1,p2,p3,p4,a in impropers:
-                fh.write( "{:>8d}{:>8d}{:>8d}{:>8d}".format(p1.idx+1,p2.idx+1,p3.idx+1,p4.idx+1) )
-                counter += 1
-                if counter == 2:
-                    fh.write("\n")
-                    counter = 0
-                else:
-                    fh.write(" ")
-            fh.write("\n" if counter == 0 else "\n\n")
-
-            fh.write("\n{:>8d} !NDON: donors\n\n\n".format(0))
-            fh.write("\n{:>8d} !NACC: acceptors\n\n\n".format(0))
-            fh.write("\n       0 !NNB\n\n")
-            natoms = len(self.particles)
-            for i in range(natoms//8):
-                fh.write("      0       0       0       0       0       0       0       0\n")
-            for i in range(natoms-8*(natoms//8)):
-                fh.write("      0")
-            fh.write("\n\n       1       0 !NGRP\n\n")
-
-
-class ArbdModel(PdbModel):
-    def __init__(self, children, dimensions=(1000,1000,1000), origin=None, temperature=291, timestep=50e-6, cutoff=50, decompPeriod=10000, pairlistDistance=None, nonbondedResolution=0.1, remove_duplicate_bonded_terms=True, extra_bd_file_lines=""):
-        PdbModel.__init__(self, children, dimensions, remove_duplicate_bonded_terms)
-        self.temperature = temperature
-
-        self.origin = origin
-        self.timestep = timestep
-        self.cutoff  =  cutoff
-
-        if pairlistDistance == None:
-            pairlistDistance = cutoff+2
-        
-        self.decompPeriod = decompPeriod
-        self.pairlistDistance = pairlistDistance
-
-        self.extra_bd_file_lines = extra_bd_file_lines
-
-        self.numParticles = 0
-        self.particles = []
-        self.type_counts = None
-
-        self.nbSchemes = []
-        self._nbParamFiles = [] # This could be made more robust
-        self.nbResolution = 0.1
-
-        self._written_bond_files = dict()        
-
-        self.cacheUpToDate = False
-
-    def clear_all(self, keep_children=False):
-        Parent.clear_all(self, keep_children=keep_children)
-        self.particles = []
-        self.numParticles = 0
-        self.type_counts = None
-        self._nbParamFiles = []
-        self._written_bond_files = dict()
-
-    def _getNbScheme(self, typeA, typeB):
-        scheme = None
-        for s,A,B in self.nbSchemes:
-            if A is None or B is None:
-                if A is None and B is None:
-                    return s
-                elif A is None and typeB == B:
-                    return s
-                elif B is None and typeA == A:
-                    return s
-            elif typeA == A and typeB == B:
-                return s
-        raise Exception("No nonbonded scheme found for %s and %s" % (typeA.name, typeB.name))
-
-    def _countParticleTypes(self):
-        ## TODO: check for modifications to particle that require
-        ## automatic generation of new particle type
-        type_counts = dict()
-        for p in self:
-            t = p.type_
-            if t in type_counts:
-                type_counts[t] += 1
-            else:
-                type_counts[t] = 1
-        self.type_counts = type_counts
-
-    def _updateParticleOrder(self):
-        ## Create ordered list
-        self.particles = [p for p in self]
-        # self.particles = sorted(particles, key=lambda p: (p.type_, p.idx))
-        
-        ## Update particle indices
-        for p,i in zip(self.particles,range(len(self.particles))):
-            p.idx = i
-            
-        # self.initialCoords = np.array([p.initialPosition for p in self.particles])
-
-    def useNonbondedScheme(self, nbScheme, typeA=None, typeB=None):
-        self.nbSchemes.append( (nbScheme, typeA, typeB) )
-        if typeA != typeB:
-            self.nbSchemes.append( (nbScheme, typeB, typeA) )
-
-    def simulate(self, output_name, output_directory='output', num_steps=100000000, timestep=None, gpu=0, output_period=1e4, arbd=None, directory='.', replicas=1, log_file=None):
-        assert(type(gpu) is int)
-        num_steps = int(num_steps)
-
-        d_orig = os.getcwd()
-        try:
-            if not os.path.exists(directory):
-                os.makedirs(directory)
-            os.chdir(directory)
-
-            if timestep is not None:
-                self.timestep = timestep
-
-            if self.cacheUpToDate == False: # TODO: remove cache?
-                self._countParticleTypes()
-                self._updateParticleOrder()
-
-            if output_directory == '': output_directory='.'
-
-            if arbd is None:
-                for path in os.environ["PATH"].split(os.pathsep):
-                    path = path.strip('"')
-                    fname = os.path.join(path, "arbd")
-                    if os.path.isfile(fname) and os.access(fname, os.X_OK):
-                        arbd = fname
-                        break 
-
-            if arbd is None: raise Exception("ARBD was not found")
-
-            if not os.path.exists(arbd):
-                raise Exception("ARBD was not found")
-            if not os.path.isfile(arbd):
-                raise Exception("ARBD was not found")
-            if not os.access(arbd, os.X_OK):
-                raise Exception("ARBD is not executable")
-
-            if not os.path.exists(output_directory):
-                os.makedirs(output_directory)
-            elif not os.path.isdir(output_directory):
-                raise Exception("output_directory '%s' is not a directory!" % output_directory)
-
-
-            self.writePdb( output_name + ".pdb" )
-            self.writePsf( output_name + ".psf" )
-            self.writeArbdFiles( output_name, numSteps=num_steps, outputPeriod=output_period )
-            os.sync()
-
-            ## http://stackoverflow.com/questions/18421757/live-output-from-subprocess-command
-
-            cmd = [arbd, '-g', "%d" % gpu]
-            if replicas > 1:
-                cmd = cmd + ['-r',replicas]
-            cmd = cmd + ["%s.bd" % output_name, "%s/%s" % (output_directory, output_name)]
-            cmd = tuple(str(x) for x in cmd)
-
-            print("Running ARBD with: %s" % " ".join(cmd))
-            if log_file is None or (hasattr(log_file,'write') and callable(log_file.write)):
-                fd = sys.stdout if log_file is None else log_file
-                process = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
-                for line in process.stdout:
-                    fd.write(line)
-                    fd.flush()
-            else:
-                with open(log_file,'w') as fd:
-                    process = subprocess.Popen(cmd, stdout=log_file, universal_newlines=True)
-                    process.communicate()
-
-        except:
-            raise
-        finally:
-            os.chdir(d_orig)
-
-
-    # -------------------------- #
-    # Methods for printing model #
-    # -------------------------- #
-
-    def writeArbdFiles(self, prefix, numSteps=100000000, outputPeriod=10000):
-        ## TODO: save and reference directories and prefixes using member data
-        d = self.potential_directory = "potentials"
-        if not os.path.exists(d):
-            os.makedirs(d)
-        self._restraint_filename = "%s/%s.restraint.txt" % (d, prefix)
-        self._bond_filename = "%s/%s.bonds.txt" % (d, prefix)
-        self._angle_filename = "%s/%s.angles.txt" % (d, prefix)
-        self._dihedral_filename = "%s/%s.dihedrals.txt" % (d, prefix)
-        self._exclusion_filename = "%s/%s.exculsions.txt" % (d, prefix)
-        
-        # self._writeArbdCoordFile( prefix + ".coord.txt" )
-        self._writeArbdParticleFile( prefix + ".particles.txt" )
-        self._writeArbdRestraintFile()
-        self._writeArbdBondFile()
-        self._writeArbdAngleFile()
-        self._writeArbdDihedralFile()
-        self._writeArbdExclusionFile()
-        self._writeArbdPotentialFiles( prefix, directory = d )
-        self._writeArbdConf( prefix, numSteps=numSteps, outputPeriod=outputPeriod )
-        
-    # def _writeArbdCoordFile(self, filename):
-    #     with open(filename,'w') as fh:
-    #         for p in self.particles:
-    #             fh.write("%f %f %f\n" % tuple(x for x in p.collapsedPosition()))
-
-    def _writeArbdParticleFile(self, filename):
-        with open(filename,'w') as fh:
-            for p in self.particles:
-                data = tuple([p.idx,p.type_.name] + [x for x in p.collapsedPosition()])
-                fh.write("ATOM %d %s %f %f %f\n" % data)
-
-        
-    def _writeArbdConf(self, prefix, randomSeed=None, numSteps=100000000, outputPeriod=10000, restartCoordinateFile=None):
-        ## TODO: raise exception if _writeArbdPotentialFiles has not been called
-        filename = "%s.bd" % prefix
-
-        ## Prepare a dictionary to fill in placeholders in the configuration file
-        params = self.__dict__.copy() # get parameters from System object
-
-        if randomSeed is None:
-            params['randomSeed']     = ""
-        else:
-            params['randomSeed'] = "seed %s" % randomSeed
-        params['numSteps']       = int(numSteps)
-
-        # params['coordinateFile'] = "%s.coord.txt" % prefix
-        params['particleFile'] = "%s.particles.txt" % prefix
-        if restartCoordinateFile is None:
-            params['restartCoordinates'] = ""
-        else:
-            params['restartCoordinates'] = "restartCoordinates %s" % restartCoordinateFile
-        params['outputPeriod'] = outputPeriod
-
-        for k,v in zip('XYZ', self.dimensions):
-            params['dim'+k] = v
-
-        if self.origin is None:
-            for k,v in zip('XYZ', self.dimensions):
-                params['origin'+k] = -v*0.5
-        else:
-            for k,v in zip('XYZ', self.origin):
-                params['origin'+k] = v
-
-        
-        params['pairlistDistance'] -= params['cutoff'] 
-
-        ## Actually write the file
-        with open(filename,'w') as fh:
-            fh.write("""{randomSeed}
-timestep {timestep}
-steps {numSteps}
-numberFluct 0                   # deprecated
-
-interparticleForce 1            # other values deprecated
-fullLongRange 0                 # deprecated
-temperature {temperature}
-
-outputPeriod {outputPeriod}
-## Energy doesn't actually get printed!
-outputEnergyPeriod {outputPeriod}
-outputFormat dcd
-
-## Infrequent domain decomposition because this kernel is still very slow
-decompPeriod {decompPeriod}
-cutoff {cutoff}
-pairlistDistance {pairlistDistance}
-
-origin {originX} {originY} {originZ}
-systemSize {dimX} {dimY} {dimZ}
-
-{extra_bd_file_lines}
-\n""".format(**params))
-            
-            ## Write entries for each type of particle
-            for pt,num in self.getParticleTypesAndCounts():
-                ## TODO create new particle types if existing has grid
-                particleParams = pt.__dict__.copy()
-                particleParams['num'] = num
-                fh.write("""
-particle {name}
-num {num}
-diffusion {diffusivity}
-""".format(**particleParams))
-                if 'grid' in particleParams:
-                    if not isinstance(pt.grid, list): pt.grid = [pt.grid]
-                    for g,s in pt.grid:
-                        ## TODO, use Path.relative_to?
-                        try:
-                            fh.write("gridFile {}\n".format(g.relative_to(os.getcwd())))
-                        except:
-                            fh.write("gridFile {}\n".format(g))
-
-                        fh.write("gridFileScale {}\n".format(s))
-
-                else:
-                    fh.write("gridFile {}/null.dx\n".format(self.potential_directory))
-
-            ## Write coordinates and interactions
-            fh.write("""
-## Input coordinates
-inputParticles {particleFile}
-{restartCoordinates}
-
-## Interaction potentials
-tabulatedPotential  1
-## The i@j@file syntax means particle type i will have NB interactions with particle type j using the potential in file
-""".format(**params))
-            for pair,f in zip(self._particleTypePairIter(), self._nbParamFiles):
-                i,j,t1,t2 = pair
-                fh.write("tabulatedFile %d@%d@%s\n" % (i,j,f))
-
-            ## Bonded interactions
-            restraints = self.get_restraints()
-            bonds = self.get_bonds()
-            angles = self.get_angles()
-            dihedrals = self.get_dihedrals()
-            exclusions = self.get_exclusions()
-
-            if len(bonds) > 0:
-                for b in list(set([b for i,j,b,ex in bonds])):
-                    fh.write("tabulatedBondFile %s\n" % b)
-
-            if len(angles) > 0:
-                for b in list(set([b for i,j,k,b in angles])):
-                    fh.write("tabulatedAngleFile %s\n" % b)
-
-            if len(dihedrals) > 0:
-                for b in list(set([b for i,j,k,l,b in dihedrals])):
-                    fh.write("tabulatedDihedralFile %s\n" % b)
-
-            if len(restraints) > 0:
-                fh.write("inputRestraints %s\n" % self._restraint_filename)
-            if len(bonds) > 0:
-                fh.write("inputBonds %s\n" % self._bond_filename)
-            if len(angles) > 0:
-                fh.write("inputAngles %s\n" % self._angle_filename)
-            if len(dihedrals) > 0:
-                fh.write("inputDihedrals %s\n" % self._dihedral_filename)
-            if len(exclusions) > 0:
-                fh.write("inputExcludes %s\n" % self._exclusion_filename)
-     
-        write_null_dx = False
-        for pt,num in self.getParticleTypesAndCounts():
-            if "grid" not in pt.__dict__: 
-                gridfile = "{}/null.dx".format(self.potential_directory)
-                with open(gridfile, 'w') as fh:
-                    fh.write("""object 1 class gridpositions counts  2 2 2
-origin {originX} {originY} {originZ}
-delta  {dimX} 0.000000 0.000000
-delta  0.000000 {dimY} 0.000000
-delta  0.000000 0.000000 {dimZ}
-object 2 class gridconnections counts  2 2 2
-object 3 class array type float rank 0 items 8 data follows
-0.0	0.0	0.0	
-0.0	0.0	0.0	
-0.0	0.0	
-attribute "dep" string "positions"
-object "density" class field 
-component "positions" value 1
-component "connections" value 2
-component "data" value 3
-""".format(**params))
-                    break
-
-    def getParticleTypesAndCounts(self):
-        ## TODO: remove(?)
-        return sorted( self.type_counts.items(), key=lambda x: x[0] )
-
-    def _particleTypePairIter(self):
-        typesAndCounts = self.getParticleTypesAndCounts()
-        for i in range(len(typesAndCounts)):
-            t1 = typesAndCounts[i][0]
-            for j in range(i,len(typesAndCounts)):
-                t2 = typesAndCounts[j][0]
-                yield( (i,j,t1,t2) )
-    
-    def _writeArbdPotentialFiles(self, prefix, directory = "potentials"):
-        try: 
-            os.makedirs(directory)
-        except OSError:
-            if not os.path.isdir(directory):
-                raise
-
-        pathPrefix = "%s/%s" % (directory,prefix)
-        self._writeNonbondedParameterFiles( pathPrefix + "-nb" )
-        # self._writeBondParameterFiles( pathPrefix )
-        # self._writeAngleParameterFiles( pathPrefix )
-        # self._writeDihedralParameterFiles( pathPrefix )
-                
-    def _writeNonbondedParameterFiles(self, prefix):
-        x = np.arange(0, self.cutoff, self.nbResolution)
-        for i,j,t1,t2 in self._particleTypePairIter():
-            f = "%s.%s-%s.dat" % (prefix, t1.name, t2.name)
-            scheme = self._getNbScheme(t1,t2)
-            scheme.write_file(f, t1, t2, rMax = self.cutoff)
-            self._nbParamFiles.append(f)
-
-    def _getNonbondedPotential(self,x,a,b):
-        return a*(np.exp(-x/b))    
-
-    def _writeArbdRestraintFile( self ):
-        with open(self._restraint_filename,'w') as fh:
-            for i,restraint in self.get_restraints():
-                item = [i.idx]
-                if len(restraint) == 1:
-                    item.append(restraint[0])
-                    item.extend(i.get_collapsed_position())
-                elif len(restraint) == 2:
-                    item.append(restraint[0])
-                    item.extend(restraint[1])
-                elif len(restraint) == 5:
-                    item.extend(restraint)
-                fh.write("RESTRAINT %d %f %f %f %f\n" % tuple(item))
-
-    def _writeArbdBondFile( self ):
-        for b in list( set( [b for i,j,b,ex in self.get_bonds()] ) ):
-            if type(b) is not str:
-                b.write_file()
-
-        with open(self._bond_filename,'w') as fh:
-            for i,j,b,ex in self.get_bonds():
-                item = (i.idx, j.idx, str(b))
-                if ex:
-                    fh.write("BOND REPLACE %d %d %s\n" % item)
-                else:
-                    fh.write("BOND ADD %d %d %s\n" % item)
-
-    def _writeArbdAngleFile( self ):
-        for b in list( set( [b for i,j,k,b in self.get_angles()] ) ):
-            if type(b) is not str:
-                b.write_file()
-
-        with open(self._angle_filename,'w') as fh:
-            for b in self.get_angles():
-                item = tuple([p.idx for p in b[:-1]] + [str(b[-1])])
-                fh.write("ANGLE %d %d %d %s\n" % item)
-
-    def _writeArbdDihedralFile( self ):
-        for b in list( set( [b for i,j,k,l,b in self.get_dihedrals()] ) ):
-            if type(b) is not str:
-                b.write_file()
-
-        with open(self._dihedral_filename,'w') as fh:
-            for b in self.get_dihedrals():
-                item = tuple([p.idx for p in b[:-1]] + [str(b[-1])])
-                fh.write("DIHEDRAL %d %d %d %d %s\n" % item)
-
-    def _writeArbdExclusionFile( self ):
-        with open(self._exclusion_filename,'w') as fh:
-            for ex in self.get_exclusions():
-                item = tuple(int(p.idx) for p in ex)
-                fh.write("EXCLUDE %d %d\n" % item)
-
-    def dimensions_from_structure( self, padding_factor=1.5, isotropic=False ):
-        ## TODO: cache coordinates using numpy arrays for quick min/max
-        raise(NotImplementedError)
-
-    def write_namd_configuration( self, output_name, num_steps = 1e6,
-                                  output_directory = 'output',
-                                  update_dimensions=True, extrabonds=True ):
-
-        format_data = self.__dict__.copy() # get parameters from System object
-
-        format_data['extrabonds'] = """extraBonds on
-extraBondsFile $prefix.exb
-""" if extrabonds else ""
-
-        if self.useTclForces:
-            format_data['margin'] = ""
-            format_data['tcl_forces'] = """tclForces on
-tclForcesScript $prefix.forces.tcl
-"""
-        else:
-            format_data['margin'] = """margin              30
-"""
-            format_data['tcl_forces'] = ""
-
-        if update_dimensions:
-            format_data['dimensions'] = self.dimensions_from_structure()
-
-        for k,v in zip('XYZ', format_data['dimensions']):
-            format_data['origin'+k] = -v*0.5
-            format_data['cell'+k] = v
-
-        format_data['prefix'] = output_name
-        format_data['num_steps'] = int(num_steps//12)*12
-        format_data['output_directory'] = output_directory
-        filename = '{}.namd'.format(output_name)
-
-        with open(filename,'w') as fh:
-            fh.write("""
-set prefix {prefix}
-set nLast 0;			# increment when continueing a simulation
-set n [expr $nLast+1]
-set out {output_directory}/$prefix-$n
-set temperature    300
-
-structure          $prefix.psf
-coordinates        $prefix.pdb
-
-outputName         $out
-XSTfile            $out.xst
-DCDfile            $out.dcd
-
-#############################################################
-## SIMULATION PARAMETERS                                   ##
-#############################################################
-
-# Input
-paraTypeCharmm	    on
-parameters          charmm36.nbfix/par_all36_na.prm
-parameters	    charmm36.nbfix/par_water_ions_na.prm
-
-wrapAll             off
-
-# Force-Field Parameters
-exclude             scaled1-4
-1-4scaling          1.0
-switching           on
-switchdist           8
-cutoff              10
-pairlistdist        12
-{margin}
-
-# Integrator Parameters
-timestep            2.0  ;# 2fs/step
-rigidBonds          all  ;# needed for 2fs steps
-nonbondedFreq       1
-fullElectFrequency  3
-stepspercycle       12
-
-# PME (for full-system periodic electrostatics)
-PME                 no
-PMEGridSpacing      1.2
-
-# Constant Temperature Control
-langevin            on    ;# do langevin dynamics
-# langevinDamping     1   ;# damping coefficient (gamma); used in original study
-langevinDamping     0.1   ;# less friction for faster relaxation
-langevinTemp        $temperature
-langevinHydrogen    off    ;# don't couple langevin bath to hydrogens
-
-# output
-useGroupPressure    yes
-xstFreq             4800
-outputEnergies      4800
-dcdfreq             4800
-restartfreq         48000
-
-#############################################################
-## EXTRA FORCES                                            ##
-#############################################################
-
-# ENM and intrahelical extrabonds
-{extrabonds}
-{tcl_forces}
-
-#############################################################
-## RUN                                                     ##
-#############################################################
-
-# Continuing a job from the restart files
-cellBasisVector1 {cellX} 0 0
-cellBasisVector2 0 {cellY} 0
-cellBasisVector3 0 0 {cellZ}
-
-if {{$nLast == 0}} {{
-    temperature 300
-    fixedAtoms on
-    fixedAtomsForces on
-    fixedAtomsFile $prefix.fixed.pdb
-    fixedAtomsCol B
-    minimize 2400
-    fixedAtoms off
-    minimize 2400
-}} else {{
-    bincoordinates  {output_directory}/$prefix-$nLast.restart.coor
-    binvelocities   {output_directory}/$prefix-$nLast.restart.vel
-}}
-
-run {num_steps:d}
-""".format(**format_data))
-
-    def atomic_simulate(self, output_name, output_directory='output', dry_run = False, namd2=None, log_file=None, num_procs=None, gpu=None):
-        if self.cacheUpToDate == False: # TODO: remove cache?
-            self._countParticleTypes()
-            self._updateParticleOrder()
-
-        if output_directory == '': output_directory='.'
-        self.writePdb( output_name + ".pdb" )
-        self.writePdb( output_name + ".fixed.pdb", beta_from_fixed=True )
-        self.writePsf( output_name + ".psf" )
-        self.write_namd_configuration( output_name, output_directory = output_directory )
-        os.sync()
-
-        if not dry_run:
-            if namd2 is None:
-                for path in os.environ["PATH"].split(os.pathsep):
-                    path = path.strip('"')
-                    fname = os.path.join(path, "namd2")
-                    if os.path.isfile(fname) and os.access(fname, os.X_OK):
-                        namd2 = fname
-                        break
-
-            if namd2 is None: raise Exception("NAMD2 was not found")
-
-            if not os.path.exists(namd2):
-                raise Exception("NAMD2 was not found")
-            if not os.path.isfile(namd2):
-                raise Exception("NAMD2 was not found")
-            if not os.access(namd2, os.X_OK):
-                raise Exception("NAMD2 is not executable")
-
-            if not os.path.exists(output_directory):
-                os.makedirs(output_directory)
-            elif not os.path.isdir(output_directory):
-                raise Exception("output_directory '%s' is not a directory!" % output_directory)
-
-            if num_procs is None:
-                import multiprocessing
-                num_procs = max(1,multiprocessing.cpu_count()-1)
-
-            cmd = [namd2, '+p{}'.format(num_procs), "%s.namd" % output_name]
-            cmd = tuple(str(x) for x in cmd)
-
-            print("Running NAMD2 with: %s" % " ".join(cmd))
-            if log_file is None or (hasattr(log_file,'write') and callable(log_file.write)):
-                fd = sys.stdout if log_file is None else log_file
-                process = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
-                for line in process.stdout:
-                    fd.write(line)
-                    fd.flush()
-            else:
-                with open(log_file,'w') as fd:
-                    process = subprocess.Popen(cmd, stdout=log_file, universal_newlines=True)
-                    process.communicate()
-
-
-    """ oxDNA """
-    ## https://dna.physics.ox.ac.uk/index.php/Documentation#Input_file
-
-
-    def _write_oxdna_configuration(self, filename):
-
-        _angstroms_to_oxdna = 0.11739845 ##  units "AA" "8.518e-10 m"
-        with open(filename,'w') as fh:
-            fh.write("""t = {temperature}
-b = {dimX} {dimY} {dimZ}
-E = 0 0 0
-""".format(temperature=self.temperature,
-                        dimX = self.dimensions[0]*_angstroms_to_oxdna,
-                        dimY = self.dimensions[1]*_angstroms_to_oxdna,
-                        dimZ = self.dimensions[2]*_angstroms_to_oxdna))
-
-            base_vec = np.array((1,0,0)) # TODO
-            norm_vec = np.array((0,0,1)) # TODO
-
-            ## Traverse 3'-to-5'
-            for nt in [nt for s in self.strands for nt in s.oxdna_nt[::-1]]:
-                data = dict()
-                # o = nt.collapsedOrientation()
-                o = nt.orientation
-                for k,v in zip('x y z'.split(),nt.collapsedPosition()):
-                    data[k] = v * _angstroms_to_oxdna
-                for k,v in zip('x y z'.split(),o.dot(base_vec)):
-                    data['b'+k] = v
-                for k,v in zip('x y z'.split(),o.dot(norm_vec)):
-                    data['n'+k] = v
-                fh.write("{x} {y} {z} {bx} {by} {bz} {nx} {ny} {nz}   0 0 0   0 0 0\n".format(**data)
-    )
-
-    def _write_oxdna_topology(self,filename):
-
-        strands = [s for s in self.strands if s.num_nt > 0]
-        with open(filename,'w') as fh:
-
-            fh.write("{num_nts} {num_strands}\n".format(
-                num_nts = sum([s.num_nt for s in strands]),
-                num_strands = len(self.strands)))
-
-            idx = 0
-            sidx = 1
-            for strand in strands:
-                prev = idx+len(strand.num_nt) if strand.is_circular else -1
-                last = idx if strand.is_circular else -1
-
-                ## Traverse 3'-to-5'
-                sequence = [seq for s in strand.strand_segments 
-                            for seq in s.get_sequence()][::-1]
-                for seq in sequence[:-1]:
-                    ## strand seq 3' 5'
-                    fh.write("{} {} {} {}\n".format(sidx, seq, prev, idx+1))
-                    prev = idx
-                    idx += 1
-                seq = sequence[-1]
-                fh.write("{} {} {} {}\n".format(sidx, seq, prev, last))
-                idx += 1
-                sidx += 1
-
-    def _write_oxdna_input(self, filename,
-                           topology,
-                           conf_file,
-                           trajectory_file,
-                           last_conf_file,
-                           log_file,
-                           num_steps = 1e6,
-                           interaction_type = 'DNA2',
-                           salt_concentration = None,
-                           print_conf_interval = None,
-                           print_energy_every = None,
-                           timestep = 0.003,
-                           sim_type = "MD",
-                           backend = None,
-                           backend_precision = None,
-                           seed = None,
-                           newtonian_steps = 103,
-                           diff_coeff = 2.50,
-                           thermostat = "john",
-                           list_type = "cells",
-                           ensemble = "nvt",
-                           delta_translation = 0.22,
-                           delta_rotation = 0.22,
-                           verlet_skin = 0.5,
-                           max_backbone_force = 5,
-                       ):
-
-        if seed is None:
-            import random
-            seed = random.randint(1,99999)
-
-        temperature = self.temperature
-        num_steps = int(num_steps)
-        newtonian_steps = int(newtonian_steps)
-
-        if print_conf_interval is None:
-            # print_conf_interval = min(num_steps//100)
-            print_conf_interval = 10000
-        print_conf_interval = int(print_conf_interval)
-
-        if print_energy_every is None:
-            print_energy_every = print_conf_interval
-        print_energy_every = int(print_energy_every)
-            
-        if max_backbone_force is not None:
-            max_backbone_force = 'max_backbone_force = {}'.format(max_backbone_force)
-
-
-        if interaction_type in ('DNA2',):
-            if salt_concentration is None:
-                try:
-                    ## units "80 epsilon0 295 k K / (2 (AA)**2 e**2/particle)" mM
-                    salt_concentration = 9331.3126/self.debye_length**2
-                except:
-                    salt_concentration = 0.5
-            salt_concentration = 'salt_concentration = {}'.format(salt_concentration)
-        else:
-            salt_concentration = ''
-
-        if backend is None:
-            backend = 'CUDA' if sim_type == 'MD' else 'CPU'
-
-        if backend_precision is None:
-            backend_precision = 'mixed' if backend == 'CUDA' else 'double'
-
-        if sim_type == 'VMMC':
-            ensemble = 'ensemble = {}'.format(ensemble)
-            delta_translation = 'delta_translation = {}'.format(delta_translation)
-            delta_rotation = 'delta_rotation = {}'.format(delta_rotation)
-        else:
-            ensemble = ''
-            delta_translation = ''
-            delta_rotation = ''
-            
-        with open(filename,'w') as fh:
-            fh.write("""##############################
-####  PROGRAM PARAMETERS  ####
-##############################
-interaction_type = {interaction_type}
-{salt_concentration}
-sim_type = {sim_type}
-backend = {backend}
-backend_precision = {backend_precision}
-#debug = 1
-seed = {seed}
-
-##############################
-####    SIM PARAMETERS    ####
-##############################
-steps = {num_steps:d}
-newtonian_steps = {newtonian_steps:d}
-diff_coeff = {diff_coeff}
-thermostat = {thermostat}
-
-list_type = {list_type}
-{ensemble}
-{delta_translation}
-{delta_rotation}
-
-T = {temperature:f} K
-dt = {timestep}
-verlet_skin = {verlet_skin}
-{max_backbone_force}
-
-##############################
-####    INPUT / OUTPUT    ####
-##############################
-topology = {topology}
-conf_file = {conf_file}
-lastconf_file = {last_conf_file}
-trajectory_file = {trajectory_file}
-refresh_vel = 1
-log_file = {log_file}
-no_stdout_energy = 1
-restart_step_counter = 1
-energy_file = {log_file}.energy.dat
-print_conf_interval = {print_conf_interval}
-print_energy_every = {print_energy_every}
-time_scale = linear
-external_forces = 0
-""".format( **locals() ))
-
-    def simulate_oxdna(self, output_name, directory='.', output_directory='output', topology=None, configuration=None, oxDNA=None, **oxdna_args):
-
-        if output_directory == '': output_directory='.' 
-        d_orig = os.getcwd()
-        if not os.path.exists(directory):
-            os.makedirs(directory)
-
-        os.chdir(directory)
-        try:
-
-            if oxDNA is None:
-                for path in os.environ["PATH"].split(os.pathsep):
-                    path = path.strip('"')
-                    fname = os.path.join(path, "oxDNA")
-                    if os.path.isfile(fname) and os.access(fname, os.X_OK):
-                        oxDNA = fname
-                        break 
-
-            if oxDNA is None: raise Exception("oxDNA was not found")
-
-            if not os.path.exists(oxDNA):
-                raise Exception("oxDNA was not found")
-            if not os.path.isfile(oxDNA):
-                raise Exception("oxDNA was not found")
-            if not os.access(oxDNA, os.X_OK):
-                raise Exception("oxDNA is not executable")
-
-            if not os.path.exists(output_directory):
-                os.makedirs(output_directory)
-            elif not os.path.isdir(output_directory):
-                raise Exception("output_directory '%s' is not a directory!" % output_directory)
-
-
-            if configuration is None:
-                configuration = "{}.conf".format(output_name)
-                self._write_oxdna_configuration(configuration)
-            # elif not Path(configuration).exists():
-            #     raise Exception("Unable to find oxDNA configuration file '{}'.".format(configuration))
-
-            if topology is None:
-                topology = "{}-topology.dat".format(output_name)
-                self._write_oxdna_topology(topology)
-            elif not Path(topology).exists():
-                raise Exception("Unable to find oxDNA topology file '{}'.".format(topology))
-
-            last_conf_file = "{}/{}.last.conf".format(output_directory,output_name)
-            input_file = "{}-input".format(output_name)
-
-            self._write_oxdna_input(input_file,
-                                    topology = topology,
-                                    conf_file = configuration,
-                                    trajectory_file = "{}/{}.dat".format(output_directory,output_name),
-                                    last_conf_file = last_conf_file,
-                                    log_file="{}/{}.log".format(output_directory,output_name),
-                                    **oxdna_args)
-            os.sync()
-            ## TODO: call oxdna
-            cmd = [oxDNA, input_file]
-
-            cmd = tuple(str(x) for x in cmd)
-
-            print("Running oxDNA with: %s" % " ".join(cmd))
-            process = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
-            for line in process.stdout:
-                sys.stdout.write(line)
-                sys.stdout.flush()
-
-            return topology,last_conf_file
-        finally:
-            os.chdir(d_orig)
-
-        
diff --git a/mrdna/model/nbPot.py b/mrdna/model/nbPot.py
index c26c3b07f116bc67121642c0a7dbf5c1d28df374..2329bc31d322c3a1135a7a8b368146dcda99e899 100644
--- a/mrdna/model/nbPot.py
+++ b/mrdna/model/nbPot.py
@@ -3,9 +3,9 @@ import scipy.optimize as opt
 from scipy.interpolate import interp1d
 from scipy.signal import savgol_filter as savgol
 
-from mrdna.model.nonbonded import NonbondedScheme
-from mrdna import get_resource_path
-from mrdna.config import CACHE_DIR
+from ..arbdmodel.nonbonded import NonbondedScheme
+from .. import get_resource_path
+from ..config import CACHE_DIR
 
 from scipy.optimize import curve_fit
 from pathlib import Path
diff --git a/mrdna/model/nonbonded.py b/mrdna/model/nonbonded.py
index 35ed22113877774093d143dc748c6a7dc20995b9..37d22a526aa8b58165e8ca091baefb07f65f1389 100644
--- a/mrdna/model/nonbonded.py
+++ b/mrdna/model/nonbonded.py
@@ -1,241 +1,4 @@
-from shutil import copyfile
-import os, sys
-import numpy as np
+from ..arbdmodel.nonbonded import *
 
-class NonbondedScheme():
-    """ Abstract class for writing nonbonded interactions """
-
-    def __init__(self, typesA=None, typesB=None, resolution=0.1, rMin=0):
-        """If typesA is None, and typesB is None, then """
-        self.resolution = resolution
-        self.rMin = rMin
-
-    def add_sim_system(self, simSystem):
-        self.rMax = simSystem.cutoff
-        self.r = np.arange(rMin,rMax,resolution)
-
-    def potential(self, r, typeA, typeB):
-        raise NotImplementedError
-    
-    def write_file(self, filename, typeA, typeB, rMax):
-        r = np.arange(self.rMin, rMax+self.resolution, self.resolution)
-        u = self.potential(r, typeA, typeB)
-        np.savetxt(filename, np.array([r,u]).T)
-
-
-class LennardJones(NonbondedScheme):
-    def potential(self, r, typeA, typeB):
-        epsilon = sqrt( typeA.epsilon**2 + typeB.epsilon**2 )
-        r0 = 0.5 * (typeA.radius + typeB.radius)
-        r6 = (r0/r)**6
-        r12 = r6**2
-        u = epsilon * (r12-2*r6)
-        u[0] = u[1]             # Remove NaN
-        return u
-LennardJones = LennardJones()
-
-class HalfHarmonic(NonbondedScheme):
-    def potential(self, r, typeA, typeB):
-        k = 10                   # kcal/mol AA**2
-        r0 = (typeA.radius + typeB.radius)
-        u =  0.5 * k * (r-r0)**2
-        u[r > r0] = np.zeros( np.shape(u[r > r0]) )
-        return u
-HalfHarmonic = HalfHarmonic()
-
-class TabulatedPotential(NonbondedScheme):
-    def __init__(self, tableFile, typesA=None, typesB=None, resolution=0.1, rMin=0):
-        """If typesA is None, and typesB is None, then """
-        self.tableFile = tableFile
-        # self.resolution = resolution
-        # self.rMin = rMin
-
-        ## TODO: check that tableFile exists and is regular file
-        
-    def write_file(self, filename, typeA, typeB, rMax):
-        if filename != self.tableFile:
-            copyfile(self.tableFile, filename)
-
-## Bonded potentials
-class BasePotential():
-    def __init__(self, r0, rRange=(0,50), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/"):
-        self.r0 = r0
-        self.rRange = rRange
-        self.resolution = resolution
-        self.maxForce = maxForce
-        self.prefix = prefix
-        self.periodic = False
-        self.type_ = "None"
-        self.max_potential = max_potential
-        self.kscale_ = None     # only used for 
-
-    def filename(self):
-        raise NotImplementedError("Not implemented")
-
-    def potential(self,dr):
-        raise NotImplementedError("Not implemented")
-
-    def __str__(self):
-        return self.filename()
-
-    def write_file(self):
-        r = np.arange( self.rRange[0], 
-                       self.rRange[1]+self.resolution, 
-                       self.resolution )
-        dr = r-self.r0
-
-        if self.periodic == True:
-            rSpan = self.rRange[1]-self.rRange[0]
-            assert(rSpan > 0)
-            dr = np.mod( dr+0.5*rSpan, rSpan) - 0.5*rSpan 
-
-        u = self.potential(dr)
-
-        maxForce = self.maxForce
-        if maxForce is not None:
-            assert(maxForce > 0)
-            f = np.diff(u)/np.diff(r)
-            f[f>maxForce] = maxForce
-            f[f<-maxForce] = -maxForce
-            u[0] = 0
-            u[1:] = np.cumsum(f*np.diff(r))
-
-        if self.max_potential is not None:
-            f = np.diff(u)/np.diff(r)
-            ids = np.where( 0.5*(u[1:]+u[:-1]) > self.max_potential )[0]
-
-            w = np.sqrt(2*self.max_potential/self.k)
-            drAvg = 0.5*(np.abs(dr[ids]) + np.abs(dr[ids+1]))
-
-            f[ids] = f[ids] * np.exp(-(drAvg-w)/(w))
-            u[0] = 0
-            u[1:] = np.cumsum(f*np.diff(r))
-
-        u = u - np.min(u)
-
-        np.savetxt( self.filename(), np.array([r, u]).T, fmt="%f" )
-
-class HarmonicPotential(BasePotential):
-    def __init__(self, k, r0, rRange, resolution, maxForce, max_potential, prefix, correct_geometry=False):
-        self.k = k
-        self.kscale_ = None
-        BasePotential.__init__(self, r0, rRange, resolution, maxForce, max_potential, prefix)
-
-    def filename(self):
-        return "%s%s-%.3f-%.3f.dat" % (self.prefix, self.type_,
-                                       self.k*self.kscale_, self.r0)
-    def potential(self,dr):
-        return 0.5*self.k*dr**2
-
-    def __hash__(self):
-        assert(self.type_ != "None")
-        return hash((self.type_, self.k, self.r0, self.rRange, self.resolution, self.maxForce, self.max_potential, self.prefix, self.periodic))
-
-    def __eq__(self, other):
-        for a in ("type_", "k", "r0", "rRange", "resolution", "maxForce", "max_potential", "prefix", "periodic"):
-            if self.__dict__[a] != other.__dict__[a]:
-                return False
-        return True
-
-# class NonBonded(HarmonicPotential):
-#     def _init_hook(self):
-#         self.type = "nonbonded"
-#         self.kscale_ = 1.0
-
-class HarmonicBond(HarmonicPotential):
-    def __init__(self, k, r0, rRange=(0,50), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/", correct_geometry=False, temperature=295):
-        HarmonicPotential.__init__(self, k, r0, rRange, resolution, maxForce, max_potential, prefix)
-        self.type_ = "gbond" if correct_geometry else "bond"
-        self.kscale_ = 1.0
-        self.correct_geometry = correct_geometry
-        self.temperature = temperature
-
-    def potential(self,dr):
-        u = HarmonicPotential.potential(self,dr)
-        if self.correct_geometry:
-            with np.errstate(divide='ignore',invalid='ignore'):
-                du = 2*0.58622592*np.log(dr+self.r0) * self.temperature/295
-            du[np.logical_not(np.isfinite(du))] = 0
-            u = u-du
-        return u
-
-
-class HarmonicAngle(HarmonicPotential):
-    def __init__(self, k, r0, rRange=(0,181), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/"):
-        HarmonicPotential.__init__(self, k, r0, rRange, resolution, maxForce, max_potential, prefix)
-        self.type_ = "angle"
-        self.kscale_ = (180.0/np.pi)**2
-
-class HarmonicDihedral(HarmonicPotential):
-    def __init__(self, k, r0, rRange=(-180,180), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/"):
-        HarmonicPotential.__init__(self, k, r0, rRange, resolution, maxForce, max_potential, prefix)
-        self.periodic = True
-        self.type_ = "dihedral"
-        self.kscale_ = (180.0/np.pi)**2
-
-class WLCSKBond(BasePotential):
-    """ ## https://aip.scitation.org/doi/full/10.1063/1.4968020 """
-    def __init__(self, d, lp, kT, rRange=(0,50), resolution=0.02, maxForce=100, max_potential=None, prefix="potentials/"):
-        BasePotential.__init__(self, 0, rRange, resolution, maxForce, max_potential, prefix)
-        self.type_ = "wlcbond"
-        self.d = d          # separation
-        self.lp = lp            # persistence length
-        self.kT = kT
-
-    def filename(self):
-        return "%s%s-%.3f-%.3f.dat" % (self.prefix, self.type_,
-                                       self.d, self.lp)
-    def potential(self, dr):
-        nk = self.d / (2*self.lp)
-        q2 = (dr / self.d)**2
-        a1,a2 = 1, -7.0/(2*nk)
-        a3 = 3.0/32 - 3.0/(8*nk) - 6.0/(4*nk**2)
-        p0,p1,p2,p3,p4 = 13.0/32, 3.4719,2.5064,-1.2906,0.6482
-        a4 = (p0 + p1/(2*nk) + p2*(2*nk)**-2) / (1+p3/(2*nk)+p4*(2*nk)**-2)
-        with np.errstate(divide='ignore',invalid='ignore'):
-            u = self.kT * nk * ( a1/(1-q2) - a2*np.log(1-q2) + a3*q2 - 0.5*a4*q2*(q2-2) )
-        max_force = np.diff(u[q2<1][-2:]) / np.diff(dr).mean()
-        max_u = u[q2<1][-1]
-        max_dr = dr[q2<1][-2]
-        assert( max_force >= 0 )
-        u[q2>=1] = (dr[q2>=1]-max_dr)*max_force + max_u
-        return u
-
-    def __hash__(self):
-        assert(self.type_ != "None")
-        return hash((self.type_, self.d, self.lp, self.kT, self.rRange, self.resolution, self.maxForce, self.max_potential, self.prefix, self.periodic))
-
-    def __eq__(self, other):
-        for a in ("type_", "d", "lp", "kT" "rRange", "resolution", "maxForce", "max_potential", "prefix", "periodic"):
-            if self.__dict__[a] != other.__dict__[a]:
-                return False
-        return True
-
-class WLCSKAngle(BasePotential):
-    ## https://aip.scitation.org/doi/full/10.1063/1.4968020
-    def __init__(self, d, lp, kT, rRange=(0,181), resolution=0.5, maxForce=None, max_potential=None, prefix="potentials/"):
-        BasePotential.__init__(self, 180, rRange, resolution, maxForce, max_potential, prefix)
-        self.type_ = "wlcangle"
-        self.d = d          # separation
-        self.lp = lp            # persistence length
-        self.kT = kT
-
-    def filename(self):
-        return "%s%s-%.3f-%.3f.dat" % (self.prefix, self.type_,
-                                       self.d, self.lp)
-    def potential(self,dr):
-        nk = self.d / (2*self.lp)
-        p1,p2,p3,p4 = -1.237, 0.8105, -1.0243, 0.4595
-        C = (1 + p1*(2*nk) + p2*(2*nk)**2) / (2*nk+p3*(2*nk)**2+p4*(2*nk)**3)
-        u = self.kT * C * (1-np.cos(dr * np.pi / 180))
-        return u
-
-    def __hash__(self):
-        assert(self.type_ != "None")
-        return hash((self.type_, self.d, self.lp, self.kT, self.rRange, self.resolution, self.maxForce, self.max_potential, self.prefix, self.periodic))
-
-    def __eq__(self, other):
-        for a in ("type_", "d", "lp", "kT" "rRange", "resolution", "maxForce", "max_potential", "prefix", "periodic"):
-            if self.__dict__[a] != other.__dict__[a]:
-                return False
-        return True
+from sys import stderr
+stderr.write("WARNING: the module 'mrdna.model.nonbonded' has been deprecated. Please change your scripts to use 'mrdna.arbdmodel.nonbonded'\n")
diff --git a/mrdna/readers/cadnano_segments.py b/mrdna/readers/cadnano_segments.py
index 304171843f0f975cdec8e492c8ac67b3652696a8..f5986074e8c633860c1dd6f041c26c41747c9246 100644
--- a/mrdna/readers/cadnano_segments.py
+++ b/mrdna/readers/cadnano_segments.py
@@ -5,7 +5,7 @@ import os,sys
 from glob import glob
 import re
 
-from ..coords import readArbdCoords, readAvgArbdCoords, rotationAboutAxis
+from ..arbdmodel.coords import readArbdCoords, readAvgArbdCoords, rotationAboutAxis
 from ..segmentmodel import SegmentModel, SingleStrandedSegment, DoubleStrandedSegment
 from ..model.dna_sequence import m13 as m13seq
 
diff --git a/mrdna/readers/polygon_mesh.py b/mrdna/readers/polygon_mesh.py
index ec41a6774f6f5ef80373235acc999002bd4bd103..15ba8a26aa81b3430e85090de24425416a963b5e 100644
--- a/mrdna/readers/polygon_mesh.py
+++ b/mrdna/readers/polygon_mesh.py
@@ -1,7 +1,7 @@
 import numpy as np
 import sys
 import re
-from ..coords import rotationAboutAxis, minimizeRmsd
+from ..arbdmodel.coords import rotationAboutAxis, minimizeRmsd
 
 from ..version import maintainer
 from ..segmentmodel import SegmentModel, SingleStrandedSegment, DoubleStrandedSegment
@@ -310,8 +310,8 @@ def write_pdb_psf(bases, prefix):
 
     """ Function for debugging .ma parser """
 
-    from ..model.arbdmodel import ArbdModel,ParticleType, PointParticle, Group
-    from ..model.nonbonded import HarmonicBond
+    from ..arbdmodel import ArbdModel,ParticleType, PointParticle, Group
+    from ..arbdmodel.nonbonded import HarmonicBond
 
     types = {c:ParticleType(c.upper(), mass=1,radius=1) for c in "bfuxyzs"}
     bond=HarmonicBond(k=0,r0=1)
diff --git a/mrdna/readers/segmentmodel_from_lists.py b/mrdna/readers/segmentmodel_from_lists.py
index 277573d351e2eb327f79fd1f3413e1e5a8ed6a3c..475988982f5368eca84b9b03e63ca34e5ef8a2c3 100644
--- a/mrdna/readers/segmentmodel_from_lists.py
+++ b/mrdna/readers/segmentmodel_from_lists.py
@@ -6,7 +6,7 @@ import os,sys
 import scipy
 
 from ..segmentmodel import SegmentModel, SingleStrandedSegment, DoubleStrandedSegment
-from ..coords import quaternion_from_matrix
+from ..arbdmodel.coords import quaternion_from_matrix
 from .. import get_resource_path
 
 ref_stack_position = np.array((-2.41851735, -0.259761333, 3.39999978))
diff --git a/mrdna/segmentmodel.py b/mrdna/segmentmodel.py
index 1512a7b033f814dc790aed39fcd4eba1af3fe0b9..7915b9fd18dbe21ba1be502a5aa2afbe79f3a47b 100644
--- a/mrdna/segmentmodel.py
+++ b/mrdna/segmentmodel.py
@@ -2,9 +2,9 @@ import pdb
 from pathlib import Path
 import numpy as np
 import random
-from .model.arbdmodel import PointParticle, ParticleType, Group, ArbdModel
-from .coords import rotationAboutAxis, quaternion_from_matrix, quaternion_to_matrix
-from .model.nonbonded import *
+from .arbdmodel import PointParticle, ParticleType, Group, ArbdModel
+from .arbdmodel.coords import rotationAboutAxis, quaternion_from_matrix, quaternion_to_matrix
+from .arbdmodel.nonbonded import *
 from copy import copy, deepcopy
 from .model.nbPot import nbDnaScheme
 
@@ -453,6 +453,16 @@ class Segment(ConnectableElement, Group):
         tck, u = self.position_spline_params
         return np.mean(self.contour_to_position(u), axis=0)
 
+    def get_bounding_box( self, num_points=3 ):
+        positions = np.zeros( num_points, 3)
+        i = 0
+        for c in linspace(0,1,num_points):
+            positions[i] = self.contour_to_position(c)
+            i += 1
+        min_ = np.array([np.min(positions[:,i]) for i in range(3)])
+        max_ = np.array([np.max(positions[:,i]) for i in range(3)])
+        return min_,max_
+
     def _get_location_positions(self):
         return [self.contour_to_nt_pos(l.address) for l in self.locations]
 
@@ -558,7 +568,7 @@ class Segment(ConnectableElement, Group):
         if self.quaternion_spline_params is not None:
             ## TODO: performance: don't shift between quaternion and matrix representations so much
             tck, u = self.quaternion_spline_params
-            orientations = [self.contour_to_orientation(v) for v in u]
+            orientations = np.array([self.contour_to_orientation(v) for v in u])
             for i in ids:
                 orientations[i,:] = rotation_matrix.dot(orientations[i])
             quats = [quaternion_from_matrix(o) for o in orientations]
@@ -1551,6 +1561,7 @@ class SegmentModel(ArbdModel):
                  timestep=50e-6, cutoff=50, 
                  decompPeriod=10000, pairlistDistance=None, 
                  nonbondedResolution=0, DEBUG=0,
+                 integrator='Brown',
                  debye_length = None,
                  extra_bd_file_lines = "",
     ):
@@ -1558,9 +1569,9 @@ class SegmentModel(ArbdModel):
         if DEBUG > 0: print("Building ARBD Model")
         ArbdModel.__init__(self,segments,
                            origin, dimensions,
-                           temperature, timestep, cutoff,
-                           decompPeriod, pairlistDistance=None,
-                           nonbondedResolution = 0,
+                           temperature, timestep, integrator,
+                           cutoff, decompPeriod, pairlist_distance=None,
+                           nonbonded_resolution = 0,
                            extra_bd_file_lines = extra_bd_file_lines
         )
 
@@ -2428,7 +2439,7 @@ class SegmentModel(ArbdModel):
                     parent = self._getParent( b1, b2 )
 
                     """ Add heuristic 90 degree potential to keep orientation bead orthogonal """
-                    k = 0.5*k_dsdna_angle(sep)
+                    k = 0.25*k_dsdna_angle(sep)
                     pot = self.get_angle_potential(k,90)
                     parent.add_angle(o1,b1,b2, pot)
                     parent.add_angle(b1,b2,o2, pot)
@@ -2835,10 +2846,20 @@ class SegmentModel(ArbdModel):
         ## clear strands
         try:
             for s in self.strands:
-                self.children.remove(s)
+                try:
+                    self.children.remove(s)
+                except:
+                    pass
+        except:
+            pass
+
+        try:
             for seg in self.segments:
-                for d in ('fwd','rev'):
-                    seg.strand_pieces[d] = []
+                try:
+                    for d in ('fwd','rev'):
+                        seg.strand_pieces[d] = []
+                except:
+                    pass
         except:
             pass
         self.strands = strands = []
@@ -3210,17 +3231,27 @@ proc calcforces {} {
 }
 """)
 
-    def dimensions_from_structure( self, padding_factor=1.5, isotropic=False ):
-        positions = []
+    def get_bounding_box( self, num_points=3 ):
+        positions = np.zeros( (len(self.segments)*num_points, 3) )
+        i = 0
         for s in self.segments:
-            positions.append(s.contour_to_position(0))
-            positions.append(s.contour_to_position(0.5))
-            positions.append(s.contour_to_position(1))
-        positions = np.array(positions)
-        dx,dy,dz = [(np.max(positions[:,i])-np.min(positions[:,i])+30)*padding_factor for i in range(3)]
+            for c in linspace(0,1,num_points):
+                positions[i] = (s.contour_to_position(c))
+                i += 1
+        min_ = np.array([np.min(positions[:,i]) for i in range(3)])
+        max_ = np.array([np.max(positions[:,i]) for i in range(3)])
+        return min_,max_
+
+    def get_bounding_box_center( self, num_points=3 ):
+        min_,max_ = self.get_bounding_box(num_points)
+        return 0.5*(max_+min_)
+
+    def dimensions_from_structure( self, padding_factor=1.5, isotropic=False ):
+        min_,max_ = self.get_bounding_box()
+        dx,dy,dz = (max_-min_+30)*padding_factor
         if isotropic:
             dx = dy = dz = max((dx,dy,dz))
-        return [dx,dy,dz]
+        return np.array([dx,dy,dz])
 
     def add_grid_potential(self, grid_file, scale=1, per_nucleotide=True):
         grid_file = Path(grid_file)
@@ -3255,12 +3286,265 @@ proc calcforces {} {
             first_atomic_index = s.generate_atomic_model(scale,first_atomic_index)
         self._assign_basepairs()
 
+    """ OxDNA """
+    ## https://dna.physics.ox.ac.uk/index.php/Documentation#Input_file
     def generate_oxdna_model(self, scale=1):
         self.clear_beads()
         self.children = self.strands
         for s in self.strands:
             s.generate_oxdna_model()
 
+    def _write_oxdna_configuration(self, filename):
+
+        _angstroms_to_oxdna = 0.11739845 ##  units "AA" "8.518e-10 m"
+        with open(filename,'w') as fh:
+            fh.write("""t = {temperature}
+b = {dimX} {dimY} {dimZ}
+E = 0 0 0
+""".format(temperature=self.temperature,
+                        dimX = self.dimensions[0]*_angstroms_to_oxdna,
+                        dimY = self.dimensions[1]*_angstroms_to_oxdna,
+                        dimZ = self.dimensions[2]*_angstroms_to_oxdna))
+
+            base_vec = np.array((1,0,0)) # TODO
+            norm_vec = np.array((0,0,1)) # TODO
+
+            ## Traverse 3'-to-5'
+            for nt in [nt for s in self.strands for nt in s.oxdna_nt[::-1]]:
+                data = dict()
+                # o = nt.collapsedOrientation()
+                o = nt.orientation
+                for k,v in zip('x y z'.split(),nt.collapsedPosition()):
+                    data[k] = v * _angstroms_to_oxdna
+                for k,v in zip('x y z'.split(),o.dot(base_vec)):
+                    data['b'+k] = v
+                for k,v in zip('x y z'.split(),o.dot(norm_vec)):
+                    data['n'+k] = v
+                fh.write("{x} {y} {z} {bx} {by} {bz} {nx} {ny} {nz}   0 0 0   0 0 0\n".format(**data)
+    )
+
+    def _write_oxdna_topology(self,filename):
+
+        strands = [s for s in self.strands if s.num_nt > 0]
+        with open(filename,'w') as fh:
+
+            fh.write("{num_nts} {num_strands}\n".format(
+                num_nts = sum([s.num_nt for s in strands]),
+                num_strands = len(self.strands)))
+
+            idx = 0
+            sidx = 1
+            for strand in strands:
+                prev = idx+len(strand.num_nt) if strand.is_circular else -1
+                last = idx if strand.is_circular else -1
+
+                ## Traverse 3'-to-5'
+                sequence = [seq for s in strand.strand_segments
+                            for seq in s.get_sequence()][::-1]
+                for seq in sequence[:-1]:
+                    ## strand seq 3' 5'
+                    fh.write("{} {} {} {}\n".format(sidx, seq, prev, idx+1))
+                    prev = idx
+                    idx += 1
+                seq = sequence[-1]
+                fh.write("{} {} {} {}\n".format(sidx, seq, prev, last))
+                idx += 1
+                sidx += 1
+
+    def _write_oxdna_input(self, filename,
+                           topology,
+                           conf_file,
+                           trajectory_file,
+                           last_conf_file,
+                           log_file,
+                           num_steps = 1e6,
+                           interaction_type = 'DNA2',
+                           salt_concentration = None,
+                           print_conf_interval = None,
+                           print_energy_every = None,
+                           timestep = 0.003,
+                           sim_type = "MD",
+                           backend = None,
+                           backend_precision = None,
+                           seed = None,
+                           newtonian_steps = 103,
+                           diff_coeff = 2.50,
+                           thermostat = "john",
+                           list_type = "cells",
+                           ensemble = "nvt",
+                           delta_translation = 0.22,
+                           delta_rotation = 0.22,
+                           verlet_skin = 0.5,
+                           max_backbone_force = 5,
+                       ):
+
+        if seed is None:
+            import random
+            seed = random.randint(1,99999)
+
+        temperature = self.temperature
+        num_steps = int(num_steps)
+        newtonian_steps = int(newtonian_steps)
+
+        if print_conf_interval is None:
+            # print_conf_interval = min(num_steps//100)
+            print_conf_interval = 10000
+        print_conf_interval = int(print_conf_interval)
+
+        if print_energy_every is None:
+            print_energy_every = print_conf_interval
+        print_energy_every = int(print_energy_every)
+
+        if max_backbone_force is not None:
+            max_backbone_force = 'max_backbone_force = {}'.format(max_backbone_force)
+
+
+        if interaction_type in ('DNA2',):
+            if salt_concentration is None:
+                try:
+                    ## units "80 epsilon0 295 k K / (2 (AA)**2 e**2/particle)" mM
+                    salt_concentration = 9331.3126/self.debye_length**2
+                except:
+                    salt_concentration = 0.5
+            salt_concentration = 'salt_concentration = {}'.format(salt_concentration)
+        else:
+            salt_concentration = ''
+
+        if backend is None:
+            backend = 'CUDA' if sim_type == 'MD' else 'CPU'
+
+        if backend_precision is None:
+            backend_precision = 'mixed' if backend == 'CUDA' else 'double'
+
+        if sim_type == 'VMMC':
+            ensemble = 'ensemble = {}'.format(ensemble)
+            delta_translation = 'delta_translation = {}'.format(delta_translation)
+            delta_rotation = 'delta_rotation = {}'.format(delta_rotation)
+        else:
+            ensemble = ''
+            delta_translation = ''
+            delta_rotation = ''
+
+        with open(filename,'w') as fh:
+            fh.write("""##############################
+####  PROGRAM PARAMETERS  ####
+##############################
+interaction_type = {interaction_type}
+{salt_concentration}
+sim_type = {sim_type}
+backend = {backend}
+backend_precision = {backend_precision}
+#debug = 1
+seed = {seed}
+
+##############################
+####    SIM PARAMETERS    ####
+##############################
+steps = {num_steps:d}
+newtonian_steps = {newtonian_steps:d}
+diff_coeff = {diff_coeff}
+thermostat = {thermostat}
+
+list_type = {list_type}
+{ensemble}
+{delta_translation}
+{delta_rotation}
+
+T = {temperature:f} K
+dt = {timestep}
+verlet_skin = {verlet_skin}
+{max_backbone_force}
+
+##############################
+####    INPUT / OUTPUT    ####
+##############################
+topology = {topology}
+conf_file = {conf_file}
+lastconf_file = {last_conf_file}
+trajectory_file = {trajectory_file}
+refresh_vel = 1
+log_file = {log_file}
+no_stdout_energy = 1
+restart_step_counter = 1
+energy_file = {log_file}.energy.dat
+print_conf_interval = {print_conf_interval}
+print_energy_every = {print_energy_every}
+time_scale = linear
+external_forces = 0
+""".format( **locals() ))
+
+    def simulate_oxdna(self, output_name, directory='.', output_directory='output', topology=None, configuration=None, oxDNA=None, **oxdna_args):
+
+        if output_directory == '': output_directory='.'
+        d_orig = os.getcwd()
+        if not os.path.exists(directory):
+            os.makedirs(directory)
+
+        os.chdir(directory)
+        try:
+
+            if oxDNA is None:
+                for path in os.environ["PATH"].split(os.pathsep):
+                    path = path.strip('"')
+                    fname = os.path.join(path, "oxDNA")
+                    if os.path.isfile(fname) and os.access(fname, os.X_OK):
+                        oxDNA = fname
+                        break
+
+            if oxDNA is None: raise Exception("oxDNA was not found")
+
+            if not os.path.exists(oxDNA):
+                raise Exception("oxDNA was not found")
+            if not os.path.isfile(oxDNA):
+                raise Exception("oxDNA was not found")
+            if not os.access(oxDNA, os.X_OK):
+                raise Exception("oxDNA is not executable")
+
+            if not os.path.exists(output_directory):
+                os.makedirs(output_directory)
+            elif not os.path.isdir(output_directory):
+                raise Exception("output_directory '%s' is not a directory!" % output_directory)
+
+
+            if configuration is None:
+                configuration = "{}.conf".format(output_name)
+                self._write_oxdna_configuration(configuration)
+            # elif not Path(configuration).exists():
+            #     raise Exception("Unable to find oxDNA configuration file '{}'.".format(configuration))
+
+            if topology is None:
+                topology = "{}-topology.dat".format(output_name)
+                self._write_oxdna_topology(topology)
+            elif not Path(topology).exists():
+                raise Exception("Unable to find oxDNA topology file '{}'.".format(topology))
+
+            last_conf_file = "{}/{}.last.conf".format(output_directory,output_name)
+            input_file = "{}-input".format(output_name)
+
+            self._write_oxdna_input(input_file,
+                                    topology = topology,
+                                    conf_file = configuration,
+                                    trajectory_file = "{}/{}.dat".format(output_directory,output_name),
+                                    last_conf_file = last_conf_file,
+                                    log_file="{}/{}.log".format(output_directory,output_name),
+                                    **oxdna_args)
+            os.sync()
+            ## TODO: call oxdna
+            cmd = [oxDNA, input_file]
+
+            cmd = tuple(str(x) for x in cmd)
+
+            print("Running oxDNA with: %s" % " ".join(cmd))
+            process = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
+            for line in process.stdout:
+                sys.stdout.write(line)
+                sys.stdout.flush()
+
+            return topology,last_conf_file
+        finally:
+            os.chdir(d_orig)
+
+    """ Visualization """
     def vmd_tube_tcl(self, file_name="drawTubes.tcl"):
         with open(file_name, 'w') as tclFile:
             tclFile.write("## beginning TCL script \n")
diff --git a/mrdna/simulate.py b/mrdna/simulate.py
index e8aa7eaebc8469d24f941996820b32eced975f69..c388a4ab10e8a9c4ef23e19dec1043c82724c76f 100644
--- a/mrdna/simulate.py
+++ b/mrdna/simulate.py
@@ -1,6 +1,6 @@
 import os
 import tempfile
-from .coords import readArbdCoords, readAvgArbdCoords
+from .arbdmodel.coords import readArbdCoords, readAvgArbdCoords
 import shutil
 from . import get_resource_path