# bond angle distribution

**1**2

Quote from saichao cao on October 13, 2019, 4:41 pmDear Constanze Kalcher

I would like to know the correct result of the 'compute_bonds_angle_distribution.py'

program for the 'CuZr_metallic_glass.dump.gz ' data . I want to verify the result I got myself. Can you show it to me?Thanks.

Sacho

Dear Constanze Kalcher

I would like to know the correct result of the 'compute_bonds_angle_distribution.py'** **program for the 'CuZr_metallic_glass.dump.gz ' data . I want to verify the result I got myself. Can you show it to me?

Thanks.

Sacho

Quote from Constanze Kalcher on October 14, 2019, 12:57 pmDear Sacho,

I assume you are referring to a python script posted by Alexander a while ago, which uses the Create Bonds modifier to compute bond vectors and then creates a histogram of the different angles between those bond vectors.

If I execute that with OVITO 2.9 and use the example data from this tutorial, https://www.ovito.org/tutorials-2/create-custom-particle-properties/, I get the following distribution of bond angles:

Number of particles: 108000

Number of bonds: 786452

Bond angle cosine histogram:

[49171 34539 29644 27101 26466 26260 25248 23971 23328 22579 21827 21146

21145 21544 21886 22491 23859 24638 26205 28226 30216 32609 34170 36541

38790 40118 42065 42518 43127 43047 42341 41856 40882 39360 37640 35935

34059 32355 30766 28848 26837 25043 23284 21406 20013 18367 16883 15539

14574 14021 13333 12971 12365 12395 12297 12400 12886 13984 14581 16105

17896 19662 22335 25074 28343 32215 36865 42435 47970 54769 61257 66933

71451 74323 74744 72069 66762 57374 46285 34353 23153 13456 6006 1893

431 54 6 1 0 0 0 0 0 0 0 0

0 0 0 0]The pairwise cutoff values were chosen as 2.7 Å (1-1) , 2.9 Å (1-2) and 3.3 Å (2-2).

Does that answer your question?

-Constanze

Dear Sacho,

I assume you are referring to a python script posted by Alexander a while ago, which uses the Create Bonds modifier to compute bond vectors and then creates a histogram of the different angles between those bond vectors.

If I execute that with OVITO 2.9 and use the example data from this tutorial, https://www.ovito.org/tutorials-2/create-custom-particle-properties/, I get the following distribution of bond angles:

Number of particles: 108000

Number of bonds: 786452

Bond angle cosine histogram:

[49171 34539 29644 27101 26466 26260 25248 23971 23328 22579 21827 21146

21145 21544 21886 22491 23859 24638 26205 28226 30216 32609 34170 36541

38790 40118 42065 42518 43127 43047 42341 41856 40882 39360 37640 35935

34059 32355 30766 28848 26837 25043 23284 21406 20013 18367 16883 15539

14574 14021 13333 12971 12365 12395 12297 12400 12886 13984 14581 16105

17896 19662 22335 25074 28343 32215 36865 42435 47970 54769 61257 66933

71451 74323 74744 72069 66762 57374 46285 34353 23153 13456 6006 1893

431 54 6 1 0 0 0 0 0 0 0 0

0 0 0 0]

The pairwise cutoff values were chosen as 2.7 Å (1-1) , 2.9 Å (1-2) and 3.3 Å (2-2).

Does that answer your question?

-Constanze

Quote from saichao cao on October 14, 2019, 5:11 pmDear Constanze Kalche

Thanks for your answer. I got the same result with you. As shown on the left, I have drawn the bond angle distribution curve. But I don’t understand the result of this program. The end of the curve is upturned. I reviewed a number of relevant papers and found that the bond angle distribution function shows a downward trend at both ends and converges to zero, as shown on the right. So I am confused.

Sacho

Dear Constanze Kalche

Thanks for your answer. I got the same result with you. As shown on the left, I have drawn the bond angle distribution curve. But I don’t understand the result of this program. The end of the curve is upturned. I reviewed a number of relevant papers and found that the bond angle distribution function shows a downward trend at both ends and converges to zero, as shown on the right. So I am confused.

Sacho

**Uploaded files:**

- You need to login to have access to uploads.

Quote from Constanze Kalcher on October 15, 2019, 2:46 pmDear Sacho,

you are comparing two different things here. Note that the output of this script is

onlya histogram of the cosine of all bond angles that occur, i.e. you have created a histogram with equally sized bins in the cos(theta) space.To get a

bond angle distribution functionyou need to map the bin counts to a histogram with bins that are equally sized in theta-angle space (not cos(theta)-space). I think that during this transformation the bin counts should be multiplied with a factor of sin(theta), which will change the tail of the distribution function.-Constanze

Dear Sacho,

you are comparing two different things here. Note that the output of this script is *only* a histogram of the cosine of all bond angles that occur, i.e. you have created a histogram with equally sized bins in the cos(theta) space.

To get a *bond angle distribution function* you need to map the bin counts to a histogram with bins that are equally sized in theta-angle space (not cos(theta)-space). I think that during this transformation the bin counts should be multiplied with a factor of sin(theta), which will change the tail of the distribution function.

-Constanze

Quote from saichao cao on October 17, 2019, 3:23 pmDear Constanze

You are right, the x-coordinate of the two figures are different. I am sorry that I did not accurately express what I mean. For the output result, that is a histogram with equally sized bins in the cos(theta) space, I got the histogram, as shown below. But the bond-angle contribution curve I saw in papers is a downward trend at both ends, and to 0. I don’t know the result if it is correct. In addition, I did not understand the meaning of the last paragraph, why should the bin counts be multiplied with a factor of sin(theta)?

I am a beginner, thank you very much for helping me.

Sacho

Dear Constanze

You are right, the x-coordinate of the two figures are different. I am sorry that I did not accurately express what I mean. For the output result, that is a histogram with equally sized bins in the cos(theta) space, I got the histogram, as shown below. But the bond-angle contribution curve I saw in papers is a downward trend at both ends, and to 0. I don’t know the result if it is correct. In addition, I did not understand the meaning of the last paragraph, why should the bin counts be multiplied with a factor of sin(theta)?

I am a beginner, thank you very much for helping me.

Sacho

**Uploaded files:**

- You need to login to have access to uploads.

Quote from Constanze Kalcher on October 18, 2019, 3:19 pmDear Sacho,

sorry for not being clear, I didn't only hint at the two axes being different in your pictures, I meant that it will make a difference if you create a histogram of a list of cos(theta)-values or if you bin the theta-values directly. In the latter case the tail of the distribution will look like what you're describing above. Maybe it's easier to see if you try it out and plot it yourself, e.g. by comparing:

#METHOD 1 # Create linear array of bond angle cosines (all values in the upper half of matrix) angle_cosines = angle_matrix[np.triu_indices(len(angle_matrix), k=1)] # Incrementally compute histogram of angle cosines angle_cosine_histogram += np.histogram(angle_cosines, bins=bin_count, range=(-1.0,1.0))[0] #METHOD 2 # Create linear array of bond angles angles =np.arccos(angle_cosines) # Incrementally compute histogram of angles angle_histogram += np.histogram(angles, bins=bin_count, range=(0,np.pi))[0]Furthermore, you should be able to convert one distribution curve into the other by converting the x-values and multiplying the bin-counts with sin(theta) (and a normalization factor of 0.5*pi). Do you agree?

-Constanze

Dear Sacho,

sorry for not being clear, I didn't only hint at the two axes being different in your pictures, I meant that it will make a difference if you create a histogram of a list of cos(theta)-values or if you bin the theta-values directly. In the latter case the tail of the distribution will look like what you're describing above. Maybe it's easier to see if you try it out and plot it yourself, e.g. by comparing:

#METHOD 1 # Create linear array of bond angle cosines (all values in the upper half of matrix) angle_cosines = angle_matrix[np.triu_indices(len(angle_matrix), k=1)] # Incrementally compute histogram of angle cosines angle_cosine_histogram += np.histogram(angle_cosines, bins=bin_count, range=(-1.0,1.0))[0] #METHOD 2 # Create linear array of bond angles angles =np.arccos(angle_cosines) # Incrementally compute histogram of angles angle_histogram += np.histogram(angles, bins=bin_count, range=(0,np.pi))[0]

Furthermore, you should be able to convert one distribution curve into the other by converting the x-values and multiplying the bin-counts with sin(theta) (and a normalization factor of 0.5*pi). Do you agree?

-Constanze

Quote from law td on December 9, 2019, 2:25 pmQuote from Constanze Kalcher on October 14, 2019, 12:57 pmDear Sacho,

I assume you are referring to a python script posted by Alexander a while ago, which uses the Create Bonds modifier to compute bond vectors and then creates a histogram of the different angles between those bond vectors.

If I execute that with OVITO 2.9 and use the example data from this tutorial, https://www.ovito.org/tutorials-2/create-custom-particle-properties/, I get the following distribution of bond angles:

Number of particles: 108000

Number of bonds: 786452

Bond angle cosine histogram:

[49171 34539 29644 27101 26466 26260 25248 23971 23328 22579 21827 21146

21145 21544 21886 22491 23859 24638 26205 28226 30216 32609 34170 36541

38790 40118 42065 42518 43127 43047 42341 41856 40882 39360 37640 35935

34059 32355 30766 28848 26837 25043 23284 21406 20013 18367 16883 15539

14574 14021 13333 12971 12365 12395 12297 12400 12886 13984 14581 16105

17896 19662 22335 25074 28343 32215 36865 42435 47970 54769 61257 66933

71451 74323 74744 72069 66762 57374 46285 34353 23153 13456 6006 1893

431 54 6 1 0 0 0 0 0 0 0 0

0 0 0 0]The pairwise cutoff values were chosen as 2.7 Å (1-1) , 2.9 Å (1-2) and 3.3 Å (2-2).

Does that answer your question?

-Constanze

Dear Constanze

Could you tell me where can i find this

Python scriptyou mentioned above.Thanks

-Ryan

Quote from Constanze Kalcher on October 14, 2019, 12:57 pmDear Sacho,

Number of bonds: 786452

Bond angle cosine histogram:

[49171 34539 29644 27101 26466 26260 25248 23971 23328 22579 21827 21146

21145 21544 21886 22491 23859 24638 26205 28226 30216 32609 34170 36541

38790 40118 42065 42518 43127 43047 42341 41856 40882 39360 37640 35935

34059 32355 30766 28848 26837 25043 23284 21406 20013 18367 16883 15539

14574 14021 13333 12971 12365 12395 12297 12400 12886 13984 14581 16105

17896 19662 22335 25074 28343 32215 36865 42435 47970 54769 61257 66933

71451 74323 74744 72069 66762 57374 46285 34353 23153 13456 6006 1893

431 54 6 1 0 0 0 0 0 0 0 0

0 0 0 0]The pairwise cutoff values were chosen as 2.7 Å (1-1) , 2.9 Å (1-2) and 3.3 Å (2-2).

Does that answer your question?

-Constanze

Dear Constanze

Could you tell me where can i find this *Python script* you mentioned above.

Thanks

-Ryan

Quote from Constanze Kalcher on December 10, 2019, 2:20 pmDear Ryan,

since we get a lot of questions on this topic I will create a tutorial and publish it in our tutorials section this week.

https://www.ovito.org/tutorials-2/Best,

Constanze

Dear Ryan,

since we get a lot of questions on this topic I will create a tutorial and publish it in our tutorials section this week.

https://www.ovito.org/tutorials-2/

Best,

Constanze

Quote from saichao cao on December 12, 2019, 12:49 pmDear Constanze，

Thank you for your help, you are really great. I think what you said is that the output of the method1 code is only a cosine histogram and cannot directly convert only the horizontal axis, the value of Y axis also needs to be converted，multiplying the bin-counts with sin (theta) and 0.5*pi，is it right？The picture on the left is the result of running the method2 code, and the picture on the right is the bond-angle- distribution of method1 and method2. Their results are not equal. Is there something wrong with me?

best wishes.

Sacho

Dear Constanze，

Thank you for your help, you are really great. I think what you said is that the output of the method1 code is only a cosine histogram and cannot directly convert only the horizontal axis, the value of Y axis also needs to be converted，multiplying the bin-counts with sin (theta) and 0.5*pi，is it right？The picture on the left is the result of running the method2 code, and the picture on the right is the bond-angle- distribution of method1 and method2. Their results are not equal. Is there something wrong with me?

best wishes.

Sacho

**Uploaded files:**

- You need to login to have access to uploads.

Quote from Sean Locker on January 28, 2020, 6:51 pmHello Constanze,

Regarding the aforementioned python script used to calculate bond angle distribution, is there a way to output the raw data used to make this histogram? Thank you for your help.

Sean

Hello Constanze,

Regarding the aforementioned python script used to calculate bond angle distribution, is there a way to output the raw data used to make this histogram? Thank you for your help.

Sean

**1**2