Je ne suis pas sûr où exactement pour poser cette question - je ne peux pas sembler trouver la bonne plate-forme où je sens que je peux correctement demander cela ... il m'a embêté pendant si longtemps et je ne peux pas sembler saisir l'image conceptuelle. Je suis novice en Python et j'apprends donc très lentement. Mes excuses si je dis quelque chose qui est jugé stupide ou inapte. J'apprendsFonction de distribution radiale utilisant le code Python
Ma question concerne le calcul de la fonction de distribution radiale.
Je trouve ce code sur GitHub qui calcule RDF d'un système 3D:
def pairCorrelationFunction_3D(x, y, z, S, rMax, dr):
"""Compute the three-dimensional pair correlation function for a set of
spherical particles contained in a cube with side length S. This simple
function finds reference particles such that a sphere of radius rMax drawn
around the particle will fit entirely within the cube, eliminating the need
to compensate for edge effects. If no such particles exist, an error is
returned. Try a smaller rMax...or write some code to handle edge effects! ;)
Arguments:
x an array of x positions of centers of particles
y an array of y positions of centers of particles
z an array of z positions of centers of particles
S length of each side of the cube in space
rMax outer diameter of largest spherical shell
dr increment for increasing radius of spherical shell
Returns a tuple: (g, radii, interior_indices)
g(r) a numpy array containing the correlation function g(r)
radii a numpy array containing the radii of the
spherical shells used to compute g(r)
reference_indices indices of reference particles
"""
from numpy import zeros, sqrt, where, pi, mean, arange, histogram
# Find particles which are close enough to the cube center that a sphere of radius
# rMax will not cross any face of the cube
bools1 = x > rMax
bools2 = x < (S - rMax)
bools3 = y > rMax
bools4 = y < (S - rMax)
bools5 = z > rMax
bools6 = z < (S - rMax)
interior_indices, = where(bools1 * bools2 * bools3 * bools4 * bools5 * bools6)
num_interior_particles = len(interior_indices)
if num_interior_particles < 1:
raise RuntimeError ("No particles found for which a sphere of radius rMax\
will lie entirely within a cube of side length S. Decrease rMax\
or increase the size of the cube.")
edges = arange(0., rMax + 1.1 * dr, dr)
num_increments = len(edges) - 1
g = zeros([num_interior_particles, num_increments])
radii = zeros(num_increments)
numberDensity = len(x)/S**3
# Compute pairwise correlation for each interior particle
for p in range(num_interior_particles):
index = interior_indices[p]
d = sqrt((x[index] - x)**2 + (y[index] - y)**2 + (z[index] - z)**2)
d[index] = 2 * rMax
(result, bins) = histogram(d, bins=edges, normed=False)
g[p,:] = result/numberDensity
# Average g(r) for all interior particles and compute radii
g_average = zeros(num_increments)
for i in range(num_increments):
radii[i] = (edges[i] + edges[i+1])/2.
rOuter = edges[i + 1]
rInner = edges[i]
g_average[i] = mean(g[:, i])/(4.0/3.0 * pi * (rOuter**3 - rInner**3))
return (g_average, radii, interior_indices)
# Number of particles in shell/total number of particles/volume of shell/number density
# shell volume = 4/3*pi(r_outer**3-r_inner**3)
Il semble être un code très simple, mais je suis extrêmement confus d'une part:
bools1 = x > rMax
bools2 = x < (S - rMax)
bools3 = y > rMax
bools4 = y < (S - rMax)
bools5 = z > rMax
bools6 = z < (S - rMax)
Je peux comprendre bools1 = x > rMax
ce qui signifie les coordonnées des particules dont les coordonnées x sont supérieures à la valeur rMax
. Dans RDF, nous recherchons des particules qui se trouvent dans la sphère/le rayon donné.
Le prochain, cependant, est celui qui m'attrape et pour la vie de moi je ne peux pas sembler comprendre sa signification correctement: bools2 = x < (S - rMax)
.
Est-ce que bools2 fait référence aux particules intérieures à rMax
? Si oui, pourquoi ne peux-il pas spécifier x < rMax
? Quelle est l'importance de soustraire rMax
de la longueur du bord, S
, du cube? Je ne peux pas sembler comprendre la signification conceptuelle de soustraire rMax
de S
...
peut-être? 'trouve des particules de référence telles qu'une sphère de rayon rMax dessinée autour de la particule s'insère entièrement dans le cube,' – f5r5e5d