Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Constanze Kalcher

Pages: [1] 2 3 ... 10
Support Forum / New OVITO Website and User Forum!
« on: August 06, 2019, 03:16:48 PM »
Dear OVITO users,

we are happy to announce that we just published our new OVITO website at, which also features a new and improved user forum. We will keep the old forum running for a while to respond to pending requests. To post new questions, however, we encourage you to go to the new forum at Please note that you need to create a new user account for the new website.

The OVITO team

Nice work Mickaël!


I think you need to pass the current frame to the compute() function like this:
Code: [Select]
data = args.scene.selected_pipeline.compute(args.frame)otherwise you will only see the graphs get updated when you move the time slider in the GUI but not when you use the render active viewport function for the whole time series. In the latter case the args.scene.selected_pipeline.compute() will always use the currently selected frame in the GUI (which doesn't change during rendering).
Does that solve your problem?


Support Forum / Re: color coding as a function of liquid density
« on: July 31, 2019, 04:47:45 PM »
Dear Ary,

for OVITO to be able to compute an isosurface for a field quantity the data needs to be in the format of a "structured data grid". Note that the modifier is available only if a field quantity has been loaded. In OVITO 2.9, the only file parser that provides such data is the POSCAR reader, which can load charge densities computed by the VASP DFT code from CHGCAR files. It won't work with the extended xyz format.

In the current developer version of OVITO the Spatial binning modifier is now able to generate a three-dimensional grid called "Voxel grid" which can be used by the Create isosurface modifier to render iso-level surfaces for the computed grid field. So you can either first apply the Spatial binning modifier and add a Create isosurface modifier to your pipeline or you can try to bring your field quantity in the correct format, e.g. the
XSF-File format, if you want to import a Voxel grid generated elsewhere.


Support Forum / Re: observe crowdion, dumbbell, sessile and glissile
« on: July 30, 2019, 09:54:31 AM »
Dear Zahid,

no you cannot do it with OVITO. The Wigner Seitz defect analysis can only tell you if you have an interstitial or not but you cannot deduct the type of interstitial from that.


Dear Ehsan,

yes, this can be easily done with a custom python script modifier. You can just use the position vectors of these two atoms to calculate their distance and save this property as a global attribute.
Here is the corresponding manual entry for a start:
Global attributes (and their time evolution) can be easily exported using the export file function -> Table of values.

For the bond angle analysis, you could first use the Create bonds modifier to generate bonds. Then calculate the angle between your two bonds in question by again using a python script modifier.


Dear Sacho,

that completely depends on your system and what you would like to study. In general these parameters can be used to exclude certain edges and faces of a Voronoi cell from the Voronoi index calculation, please also see the paper listed as reference in the manual:
However, if you're unsure about whether you need this option or not, you should leave them at their default value of 0.


Hello Gowoon,
did you maybe not activate the identification of the above mentioned structure types (like you would also have to do in the GUI)?

Code: [Select]
# Enable the identification of cubic and hexagonal diamond structures:
ptm = PolyhedralTemplateMatchingModifier()
ptm.structures[PolyhedralTemplateMatchingModifier.Type.CUBIC_DIAMOND].enabled = True
ptm.structures[PolyhedralTemplateMatchingModifier.Type.HEX_DIAMOND].enabled = True

see scripting reference of the PTM modifier -> section "structures":

You can easily verify that by using
Code: [Select]
for type in ptm.structures:
    print(, type.enabled)

Let me know if that solves your problem.


Support Forum / Re: Order of the partial RDF serie
« on: July 24, 2019, 10:02:08 AM »
Hello Adrien,

yes that is correct. If you use the export-file function for data series objects (such as the rdf computed by the CoordinationAnalysisModifier), you will have that information in the header as well:

Code: [Select]
data = pipeline.compute()
rdf = data.series['coordination-rdf'], "rdf.txt", "txt/series")

# Radial distribution function:
# "Pair separation distance" 1-1 1-2 2-2
0.025 0.0 0.0 0.0
0.075 0.0 0.0 0.0


Support Forum / Re: Jump to a specific frame
« on: July 22, 2019, 10:50:27 PM »
yes the reason for this is that by default, only the current animation frame (frame 0 by default) is exported by the function. To export a different frame, you can pass the frame keyword parameter to the export_file() function. Alternatively, you can export all frames of the current animation sequence at once by passing multiple_frames=True.
See manual entry for in the scripting reference.

Hi Sacho,

1) I don't think you would get more information from the bond angle distribution or bond order parameters. It just seems that at that temperature you're using crystallization cannot occur (yet).

2) I haven't been familiar with the concept of the Honeycutt-Anderson index, but yes, the CNA indices of an atom with icosahedral coordination have to be 12 x (555).
The two notations seem to be a little different though:
    - The first HA index is not used in the CNA notation since OVITO only performs the analysis if a bond exists. As you said above that would always be "1" for all the CNA indices you get.
    - The second and third index in the HA-nomenclature are the same as the first and second CNA-index.
    - I don't have a good understanding what the fourth HA index represents. Yes, it's used to distinguish between different topologies of the clusters, but in what way? The third index in the CNA notation is more specific since it represents the length of the longest continuous chain of bonds from all the bonds between common neighbors.

3) Yes, by default the order will be same as in the input file. This is something you should pay attention to if you want to average atomic properties over different time frames and the order of the atoms is not the same in every frame. That can be the case for lammps dump files for example. What you should do then is either use the property "Particle Identifier" instead to index atoms or activate the option "sort_particles=True" in the import_file() function. See section "Particle ordering" in the manual:


Support Forum / Re: The example of python scripts
« on: July 17, 2019, 04:20:35 PM »
I see. This example dump file is indeed only available on gitlab, where the source code is hosted.
You can download it from here:


Hello Sacho,
you might want to try the Polyhedral template matching (PTM) modifier instead of the Common neighbor analysis (CNA) modifier, since the PTM approach promises greater reliability than the CNA in the presence of strong thermal fluctuations and strains. See the corresponding manual entry for more details:

Anyhow, may I ask what your expectation for your system is? I have no information about the temperature you were running the simulation, but the snapshot you're showing here looks like you fully melted your metal. In that case it makes sense that that the Voronoi signature of the liquid is quite "scattered" as you describe it.


Sorry I have to ask again, what do you mean by "bond angle distribution centered on each atom"? Do you want to see how the bond angle between a specific bond pair is evolving with time (i.e you have more than just one frame)? Or do you want to have a histogram of the bond angle distribution created from all bond-vector pairs in your system (with the additional constraint that you want certain particle types as central particles)? In the latter case the code snippet you posted above should work.


Concerning your first question, yes, you can access individual bond vectors and calculate the angle between a pair of bond vectors. Here is the link to the scripting reference of the latest developer version of ovito:

As for your second question, could you please again explain what you're trying to do?


Support Forum / Re: The example of python scripts
« on: July 16, 2019, 10:06:56 AM »

I'm not sure what you mean by "I cannot find the data file in the example". Could you please explain again what you're problem is?


Hello Sacho,

as explained both in the manual and in the comments of the code example, for each particle in your system this script prints a histogram of the CNA indices (which are triplets of indices) for each bond from the topology of the surrounding bond network.

To be able to assign a structure type to a particle, each particle's list of triplets then is compared to a set of signature references. As an example, in an fcc structure each particle will have 12 neighbor bonds thus 12 triplets. Moreover all of those have to be of (421) type. An hcp-coordinated atom has six bonds of (4 2 1) type and six of (4 2 2) type.
Have a look at this paper for a more detailed description:

It's not quite clear to me if you're goal is to create a histogram of all CNA indices or only the structure types of the particles. In the latter case, it is enough to just apply the Common neighbor analysis modifier and then create a histogram from the particle property "Particle Type".


Support Forum / Re: Get frame file path
« on: July 05, 2019, 04:02:24 PM »
Dear Linyuan,

when you loop over your frames you can simply check the global attributes of each frame, which contain additional information like the current timestep 'Timestep', frame 'SourceFrame' or file path 'SourceFile'.
Try, e.g.
Code: [Select]
from import *
pipeline = import_file("yourfilename*.cfg.gz")

for frame in range(pipeline.source.num_frames):
    data = pipeline.compute(frame)

Does that answer your question?


Dear zahid,

in that case you cannot use the Displacement vector modifier, since the positions of every atom in the current and reference position will be compared.


Support Forum / Re: Tio2 mechanical analysis
« on: July 03, 2019, 02:51:55 PM »
Dear Bahman,

no that wouldn't make any sense. As described in the manual, the CNA supports only the following structure types:
1 = FCC, face-centered cubic
2 = HCP, hexagonal close-packed
3 = BCC, body-centered cubic
4 = ICO, icosahedral coordination


Support Forum / Re: minimum distance between two atoms
« on: June 28, 2019, 09:59:41 AM »
Hello Dourna,

a DataCollection is a container class holding together individual data objects, each representing different fragments of a dataset. For example, a dataset loaded from a simulation data file may consist of particles, the simulation cell information and additional auxiliary data such as the current timestep number of the snaphots, etc. In the GUI, when you import your dump file, everything is automatically set up for you.

Your goal is to find the shortest distance between two particles, so yes, the position vectors is all you need.
Have you tried the modifier function I posted above? It already is the solution to your question: The Nearest Neighbor function NearestNeighborFinder(1, data).find(index) returns an iterator that visits the N nearest neighbors
of the given particle in order of ascending distance (although in your case there will be just 1 neighbor anyways). It also returns an object (in the above script called neigh) with the following attributes: index, distance, distance_squared, delta, see manual for more details:
So there is no need to implement that yourself.
In the GUI, simply add a Python modifier, click on "Edit script" and copy the above code snippet into the text editor.

Support Forum / Re: minimum distance between two atoms
« on: June 27, 2019, 12:13:39 PM »
Hello Dori,

here is an example of a custom modifier function that uses the nearest neighbor finder function of OVITO to find the closest neighbor of each particle and then loops over all those neighbor distances to find the minimum.
Code: [Select]
from import *

def modify(frame, data):
    finder = NearestNeighborFinder(1, data)
    neighbor_pairs = [ (neigh.distance, index, neigh.index) for index in range(data.particles.count) for neigh in finder.find(index)]
    print("min_dist \t Index_A \t Index B")


Dear Bahman,

it depends on what you would like to do specifically, but if you have used the Wigner-Seitz defect analysis modifier you will have created two global attributes "WignerSeitz.vacancy_count" and "WignerSeitz.interstitial_count". Global attributes can be easily exported to a text file using the File-export function "Table of values" in the GUI.


Support Forum / Re: Affine mapping of the simulation cell
« on: June 12, 2019, 12:16:36 PM »
Dear Bahman,

if you don't have periodic boundary conditions in z-directions and also the size of your simulation is changing than this option should not be applied.



I'm wondering is there any particular reason you're using an outdated version of OVITO?
In OVITO 2.9 you could use the Compute bond length modifier for that.,
whereas in OVITO 3.0 the latter has been removed since it can be done with the Compute property modifier, as you were already trying to do.


Support Forum / Re: Regarding Wiegner Seit modifier
« on: June 09, 2019, 03:53:51 PM »
Dear Bahman,

the difference is that you are referring to the OVITO 2.9 manual, whereas is the manual of the latest developer version.
You'll see this if you follow the links to the documentation of the respective OVITO versions on the download page.


Support Forum / Re: How to View only the Particles which I selected
« on: June 07, 2019, 12:02:36 PM »
Dear Masato,

I'm note sure I understand the issue correctly, what do you mean by "backcalculate" the particles?
If you only want to view a certain particle type or monomer type for example, you could use the Select particle type modifier to select the particle types you don't need and then delete them.
If you want to visualize particles with a specific particle identifier only (let's say ID = 10), you can simply use the Expression select modifier to select all others:
Expression: "ParticleIdentifier != 10"
and then apply the Delete selected particles modifier on your selection. Does that answer your question?
The same could be achieved by applying an Expression selection "ParticleIdentifier == 10" in conjunction with the Invert selection modifier and then Delete selected particles modifier.


Hi shanis,

yes, the number of clusters can of course vary in every frame. Which clusters would you like to further examine? From your first post I assumed that it's the biggest five. Seems that that's not the case.


Support Forum / Re: Visulaise the Molecule in dump xyz lammps file
« on: June 04, 2019, 11:17:03 AM »
no this is not how that works. The neighbor expression is really:
NeighborExpression: @MoleculeID == MoleculeID
Also, I assume the cutoff needs to be much larger, in order to assure that you're not missing any neighboring atoms. However, it seems like the Compute property modifier caused even more confusion.

So I suggest you to try to solve this with a python script like I explained above and let us know if you're stuck.


Hello Peter,

this might be helpful

and also the link to the OVITO code if you're interested in the technical details:


Pages: [1] 2 3 ... 10