An example for setting a linear or harmonic score between two particles using either a point distance (between particle centers) or a sphere distance (between particle surfaces). Note: this example relies on matplotlib for plotting the scores, but it can be easily modified to just print the scores.
   15     import matplotlib.pyplot
 
   31 def create_particle(m, radius = DEFAULT_RADIUS):
 
   37 def create_linear_point_pair_score():
 
   38     ''' slope*x + intercept for point distance ''' 
   42 def create_harmonic_point_pair_score():
 
   43     ''' 0.5*k*(x-mean)^2 for point distance ''' 
   47 def create_linear_sphere_pair_score():
 
   48     ''' slope*x + intercept for sphere distance ''' 
   52 def create_harmonic_sphere_pair_score():
 
   53     ''' 0.5*k*(x-mean)^2 for sphere distance ''' 
   57 def create_model(pair_score):
 
   59     particles = [create_particle(m) 
for x 
in range(2)]
 
   62     return m, xyzrs, restraint
 
   64 def plot_score(pair_score, caption,
 
   65                xmin = -15.0, xmax = 15.0, xstep = 0.01):
 
   67     Plots a pair_score between two particles, one particle 
   68     being at [0,0,0] and the other particle being at [x,0,0] 
   69     for x in the closed interval [xmin:xstep:xmax] 
   71     m, xyzrs, restraint = create_model(pair_score)
 
   72     xyzrs[0].set_coordinates([0,0,0])
 
   73     X = numpy.arange(xmin, xmax+0.1*xstep, xstep)
 
   75     for i,x 
in enumerate(X):
 
   76         xyzrs[0].set_coordinates([x,0,0])
 
   77         Y[i] = restraint.get_score()
 
   79         print(
"Not showing plot; matplotlib is not installed " 
   80               "or could not be imported")
 
   82         print(
"Not showing plot, as we are running test cases")
 
   84         matplotlib.pyplot.plot(X,Y,
'-')
 
   85         matplotlib.pyplot.title(caption)
 
   86         matplotlib.pyplot.xlabel(
r"$X_2$ [$\AA$]")
 
   87         matplotlib.pyplot.ylabel(
"Energy [$kcal \cdot mol^{-1}$]")
 
   88         matplotlib.pyplot.gca().spines[
'bottom'].set_position((
'data', 0))
 
   89         matplotlib.pyplot.show()
 
   91 if __name__ == 
"__main__":
 
   93     linear_str = 
"{:.1f}*(dist-{:.1f})".format(LINEAR_SLOPE, LINEAR_OFFSET)
 
   94     harmonic_str = 
"{:.1f}*(dist-{:.1f})^2".format(HARMONIC_K, HARMONIC_MEAN)
 
   95     plot_score(create_linear_point_pair_score(),
 
   96                caption=
"Linear point distance\n{}" 
   98     plot_score(create_linear_sphere_pair_score(),
 
   99                caption=
"Linear sphere distance (R={:.1f} A)\n{}" 
  100                .format(DEFAULT_RADIUS, linear_str))
 
  101     plot_score(create_harmonic_point_pair_score(),
 
  102                caption=
"Harmonic point distance\n{}" 
  103                .format(harmonic_str))
 
  104     plot_score(create_harmonic_sphere_pair_score(),
 
  105                caption=
"Harmonic sphere distance (R={:.1f} A)\n{}" 
  106                .format(DEFAULT_RADIUS, harmonic_str))