[ase-users] Superimpose a structural model onto slices through a CHGCAR file
Gaël Donval
G.Donval at bath.ac.uk
Fri May 19 20:45:40 CEST 2017
Hi,
> Dear Ga?l
>
> Thank you for your tips!
>
> Unfortunatley neither
>
> atoms = read('CHGDIFF', format="vasp")
> atoms.wrap()
>
> nor
>
> atoms = read('CHGDIFF', format="vasp")
> atoms.set_scaled_positions(atoms.get_scaled_positions())
>
Hum, that seems very wrong. Could you post a test file somewhere so
that I have a look?
>
> solve the problem of atoms appearing outside of the unit cell. Is
> there
> any other way to fix this?
>
>
> I can now supperimose the atom positions, If i plot the atoms like
> this:
>
>
> for atom in atoms_filtered:
> color = my_colors[atom.number]
> radius = radii[atom.number]
> struc = pylab.plot(atom.x, atom.y, color=color,
> linestyle='dashed',
> marker='o', markerfacecolor="none", markersize=radius*3,alpha=0.45)
>
>
> I can superimpose them since my slice has the same xy dimension as
> the
> unit cell. IF i zoom in on the data the marker change their size
> tough,
> but this might be a matplotlib related problem.
Oh that's true: it did not occur to me that markers are rescaled. Well,
at least the relative scales should still be fine.
>
> If if get the cell infomration via "cell_orig = atoms.get_cell()"
> and
> pass it to the filtered atoms "atoms_filtered.set_cell(cell_orig)" i
> still only get an image with the filtered atoms if i plot the
>
> filtered atoms on their own though.
As I said, you could get the same result even more easily by using your
`atoms` directly: `atoms[[0, 4, 5]]` would return a new Atoms object
containing the atom 0, 4 and 5 only and keeping everything else (cell,
pbc, etc.).
> Thank you for your Software
> recommendations
>
> I know VESTA but i do not like that there is very limited control of
> the
> colormap and you can not superimpose the structure onto slices of
> the
> data i think. I will look into the other solutions you provided.
Well, I don't really know as I tend to do things mainly with ASE and
switch to VTK for everything related to fields.
>
>
> All the best
>
>
> Fabian
>
>
Cheers,
Gaël
>
>
>
> Am 18.05.2017 um 11:05 schrieb ase-users-request at listserv.fysik.dtu.d
> k:
> > Send ase-users mailing list submissions to
> > ase-users at listserv.fysik.dtu.dk
> >
> > To subscribe or unsubscribe via the World Wide Web, visit
> > https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users
> > or, via email, send a message with subject or body 'help' to
> > ase-users-request at listserv.fysik.dtu.dk
> >
> > You can reach the person managing the list at
> > ase-users-owner at listserv.fysik.dtu.dk
> >
> > When replying, please edit your Subject line so it is more specific
> > than "Re: Contents of ase-users digest..."
> >
> >
> > Today's Topics:
> >
> > 1. Superimpose a structural model onto slices through a
> > CHGCAR
> > file (fabian)
> > 2. Re: Superimpose a structural model onto slices through a
> > CHGCAR file (Ga?l Donval)
> >
> >
> > -----------------------------------------------------------------
> > -----
> >
> > Message: 1
> > Date: Wed, 17 May 2017 17:38:58 +0200
> > From: fabian <Fabian.T89 at web.de>
> > To: ase-users at listserv.fysik.dtu.dk
> > Subject: [ase-users] Superimpose a structural model onto slices
> > through a CHGCAR file
> > Message-ID: <b586beab-ee0a-ac00-5ac6-e5cb038571d4 at web.de>
> > Content-Type: text/plain; charset="utf-8"; Format="flowed"
> >
> > Dear all,
> >
> > I want to superimpose a structural model onto slices through a
> > CHGCAR
> > file or differences of CHGCAR files.
> > Theses slices are displayed with the contour plot from matplotlib.
> > My first question is, if there is a script in existence that does
> > this
> > which somebody would be willing to share?
> >
> > At the moment i am trying to plot circles based on the atoms object
> > i
> > get from my data. I do want to limit the
> > amount of atoms from the structure to only include those which are
> > necessary and roughly of the same hightas the slice in question.
> > This is
> > were i currently am
> > wicht my code:
> >
> > import numpyas np
> > from matplotlibimport pyplot
> > from aseimport Atom
> > from ase.atomsimport Atoms
> > from ase.dataimport covalent_radiias radii
> > from ase.data.colorsimport jmol_colors
> > from matplotlib.patchesimport Circle
> > from ase.ioimport read, write
> > fig, ax= pyplot.subplots()
> >
> >
> > atoms= read('CHGDIFF', format="vasp")
> > Z_POS=25.5
> > maxi= max(a.zfor ain atoms)
> > mini= min(a.zfor ain atoms)
> > percent=40
> > add= ((maxi-mini)/100)*percent
> >
> >
> > if min(a.zfor ain atoms) < Z_POS< max(a.zfor ain atoms):
> > filter = [a.indexfor ain atomsif Z_POS-
> > add< a.z<= Z_POS+add]
> > atoms_filtered= Atoms([afor ain atomsif a.indexin filter])
> >
> >
> >
> > for atomin atoms_filtered:
> > color= jmol_colors[atom.number]
> > #color = "None"
> > radius= radii[atom.number]
> > circle= Circle((atom.x, atom.y), (radius/2.5), facecolor=co
> > lor,edgecolor='k', linewidth=0.4)#alpha=10)
> > ax.add_patch(circle)
> >
> >
> >
> > ax.axis('equal')
> > ax.set_xticks([])
> > ax.set_yticks([])
> > ax.axis('off')
> >
> > fig.savefig('out.png',dpi=300)
> >
> >
> >
> >
> >
> >
> >
> >
> > There are a few problems, however.
> >
> > a) Some atoms are not in the unit cell any more but appear as
> > mirrors on
> > the other side after the calculation? Can i shift them back
> > somehow?
> > b) if i limit with the "percent" variable the amount of atoms i
> > display
> > to not include the slab any more, the plotted picture does not have
> > the
> > size of the unicell any more? Can i somehow force it to this size
> > anyways?
> > How do i make sure, that i can to a superposition in a way that the
> > atoms are always at the corect position with in the slice thru the
> > CHGCAR file?
> > c) i use jmol_colors to color my structure i would however want to
> > change only the colour of the atoms in my slab ( Cu) to be
> > transparent.
> > Can i change the corresponding entry in the array
> > color = jmol_colors[atom.number] somehow?
> > d) Can i somehow connect only the centres of those circles from a
> > certain specie such that the molecular structure becomes visible?
> > e) I suppose there are much better ways to do this? Could somebody
> > point
> > my in the right direction should this be the case?
> >
> > All the best and thank you in advance
> >
> > Fabian
> >
> >
> >
> >
> >
> > -------------- next part --------------
> > An HTML attachment was scrubbed...
> > URL: <http://listserv.fysik.dtu.dk/pipermail/ase-users/attachments/
> > 20170517/02a44fe3/attachment-0001.html>
> >
> > ------------------------------
> >
> > Message: 2
> > Date: Thu, 18 May 2017 09:05:00 +0000
> > From: Ga?l Donval <G.Donval at bath.ac.uk>
> > To: "ase-users at listserv.fysik.dtu.dk"
> > <ase-users at listserv.fysik.dtu.dk>
> > Subject: Re: [ase-users] Superimpose a structural model onto slices
> > through a CHGCAR file
> > Message-ID: <1495098300.8288.1.camel at bath.ac.uk>
> > Content-Type: text/plain; charset="utf-8"
> >
> > > Dear all,
> > >
> > > I want to superimpose a structural model onto slices through a
> > > CHGCAR
> > > file or differences of CHGCAR files.
> > > Theses slices are displayed with the contour plot from
> > > matplotlib.
> > > My first question is, if there is a script in existence that does
> > > this
> > > which somebody would be willing to share?
> >
> > There might be but I am not aware of it. Alternatively, you could
> > try
> > to export your structure + density as a cube file and read it in
> > Paraview for instance. Paraview would show you the structure and
> > allow
> > you to slice your data and do many more things.
> >
> > But I am quite sure other tools can do it.
> >
> > > At the moment i am trying to plot circles based on the atoms
> > > object
> > > i
> > > get from my data. I do want to limit the
> > > amount of atoms from the structure to only include those which
> > > are
> > > necessary and roughly of the same hightas the slice in question.
> > > This
> > > is
> > > were i currently am
> > > wicht my code:
> > >
> > > import numpyas np
> > > from matplotlibimport pyplot
> > > from aseimport Atom
> > > from ase.atomsimport Atoms
> > > from ase.dataimport covalent_radiias radii
> > > from ase.data.colorsimport jmol_colors
> > > from matplotlib.patchesimport Circle
> > > from ase.ioimport read, write
> > > fig, ax= pyplot.subplots()
> > >
> > >
> > > atoms= read('CHGDIFF', format="vasp")
> > > Z_POS=25.5
> > > maxi= max(a.zfor ain atoms)
> > > mini= min(a.zfor ain atoms)
> > > percent=40
> > > add= ((maxi-mini)/100)*percent
> > >
> > >
> > > if min(a.zfor ain atoms) < Z_POS< max(a.zfor ain atoms):
> > > filter = [a.indexfor ain atomsif Z_POS-
> > > add< a.z<= Z_POS+add]
> > > atoms_filtered= Atoms([afor ain atomsif a.indexin filter])
> > >
> > >
> > >
> > > for atomin atoms_filtered:
> > > color= jmol_colors[atom.number]
> > > #color = "None"
> > > radius= radii[atom.number]
> > > circle= Circle((atom.x, atom.y), (radius/2.5), facecolor=co
> > > lor,edgecolor='k', linewidth=0.4)#alpha=10)
> > > ax.add_patch(circle)
> > >
> > >
> > >
> > > ax.axis('equal')
> > > ax.set_xticks([])
> > > ax.set_yticks([])
> > > ax.axis('off')
> > >
> > > fig.savefig('out.png',dpi=300)
> >
> > You could directly use matplotlib markers instead of drawing
> > circles
> > (you can select the round ones and specify a size).
> >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > There are a few problems, however.
> > >
> > > a) Some atoms are not in the unit cell any more but appear as
> > > mirrors
> > > on
> > > the other side after the calculation? Can i shift them back
> > > somehow?
> >
> > atom.wrap() in general, otherwise you will have to play with
> > positions.
> >
> >
> > > b) if i limit with the "percent" variable the amount of atoms i
> > > display
> > > to not include the slab any more, the plotted picture does not
> > > have
> > > the
> > > size of the unicell any more?
> >
> > It would... if only you gave it in your atom constructor. ASE is
> > not
> > magical, if you give it:
> > Atoms([a for a in atoms if a.index in filter])
> > it won't relate that to what you did before because the cell
> > information is contained in the `Atoms` object, not in the `Atom`
> > one.
> >
> > > Can i somehow force it to this size anyways?
> >
> > So either specify the cell size upon instanciation or use slicing
> > on
> > your `atoms` variable instead of building everything yourself.
> >
> > > How do i make sure, that i can to a superposition in a way that
> > > the
> > > atoms are always at the corect position with in the slice thru
> > > the
> > > CHGCAR file?
> >
> > You can make sure of it by checking it.
> >
> > > c) i use jmol_colors to color my structure i would however want
> > > to
> > > change only the colour of the atoms in my slab ( Cu) to be
> > > transparent.
> > > Can i change the corresponding entry in the array
> > > color = jmol_colors[atom.number] somehow?
> >
> > Yes you can, but I suggest instead that you color the structure
> > yourself. That way you can easily use predefined colors in
> > jmol_colors
> > while special-casing slab Cu.
> >
> > > d) Can i somehow connect only the centres of those circles from a
> > > certain specie such that the molecular structure becomes visible?
> >
> > Yes you can: Python is a proper programming language and matplotlib
> > a
> > very capable plotting library. But if your question is actually
> > "can I
> > do that without providing any effort", the answer is most likely
> > "no".
> > ASE is a toolkit: it is more powerful that almost anything else I
> > know
> > of as long as one is willing to dive into it. That's difficult at
> > first
> > but then becomes easier and easier.
> >
> >
> > > e) I suppose there are much better ways to do this? Could
> > > somebody
> > > point
> > > my in the right direction should this be the case?
> >
> > As I already said, Paraview could be a solution, though it also
> > requires (different) work and training to get there. Note also that
> > it
> > is not a tool dedicated to chemistry and might seem weird because
> > of
> > that. As well, I suppose Vesta, Avogadro, VDM, PyMOL and others are
> > all
> > capable to do exactly what you want but it is going to require some
> > work.
> >
> > Regards,
> > Ga?l
> >
> > > All the best and thank you in advance
> > >
> > > Fabian
> > >
> > >
> > >
> > >
> > >
> > > _______________________________________________
> > > ase-users mailing list
> > > ase-users at listserv.fysik.dtu.dk
> > > https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users
> >
> > -------------- next part --------------
> > A non-text attachment was scrubbed...
> > Name: smime.p7s
> > Type: application/x-pkcs7-signature
> > Size: 3199 bytes
> > Desc: not available
> > URL: <http://listserv.fysik.dtu.dk/pipermail/ase-users/attachments/
> > 20170518/3cb6001d/attachment.bin>
> >
> > ------------------------------
> >
> > _______________________________________________
> > ase-users mailing list
> > ase-users at listserv.fysik.dtu.dk
> > https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users
> >
> > End of ase-users Digest, Vol 107, Issue 19
> > ******************************************
>
> _______________________________________________
> ase-users mailing list
> ase-users at listserv.fysik.dtu.dk
> https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users
More information about the ase-users
mailing list