Vacancies

41 views
Skip to first unread message

Robert Koch

unread,
Feb 19, 2020, 6:55:24 PM2/19/20
to fullrmc
Hi everyone,

I know there has been some chatter about vacancies recently, but I have a bit of a different question.

Has there been any thought of incorporating a vacancy species, with something like a zero scattering length?

This scenario I have is this: 
We have a structure with some sites that are significantly partially occupied, not with mixed occupancy, but with fractional occupancy and no other species occupying the balance.
When we make an explicit supercell, we are forced to adopt some agorithm for stripping out these excess species, effectively creating vacancies.

Now, barring some nudging which may allow these species to drift onto a "vacancy site" (expensive/improbable) the vacancy distribution we impose when creating the supercell is effectively locked in.

In some cases, when the species which may occupy the vacancy site scatters well, it might be possible to resolve chemical SRO in the vacancy sublattice, but not unless we allow site swapping with vacancies. This is not possible unless some dummy species which does not scatter is kept on the vacancy site.

My current approach for X-rays will be to place H+ on the vacancy sites, but this is less than ideal. Neutrons could maybe use V?

Anyway, it might be useful, and it's just a thought.

Cheers,
Rob

Bachir Aoun

unread,
Feb 20, 2020, 10:50:28 AM2/20/20
to fullrmc
Hi Robert,

In current fullrmc. you can change scattering weight per atomic element.
For instance, you can set your scattering to neutron and later use constraint.set_atoms_weight to alter certain elements scattering weight.

in your case it's going to be something like that
PDF_CONSTRAINT = PairDistributionConstraint(weighting='neutronCohb', ...)
PDF_CONSTRAINT.set_atoms_weight({'H+':0})

it should be fairly easy to implement the same method to alter atoms scattering weight by atom index but i didn't do it because i assume that's dangerous especially when users start altering scattering weights locally to fit their systems. The assumption and the intuition is that once you set your pdb structure with the atomic elements one can alter scattering power by atom elements and this will reflect upon all your system elements not a hand picked subset of those.

hope i answered your question



 

Peter Metz

unread,
Feb 20, 2020, 12:46:40 PM2/20/20
to fullrmc
Hi Bachir and Rob,

It sounds like a vacancy object is 99% implemented already.

To make this less of a hack it seems like all that needs to be done is for a non-element to be added to or handled in the is_element_property / get_element_property  methods of pdbparser.Utilities.Database (i.e. add a non-element with zero scattering weight to .__atoms_database__)


if I add the line

__atoms_database__["xx"] = {'name':'dummy'       ,'symbol':'Xx'  ,'group':1  ,'atomicNumber':0  ,'vdwRadius':None  ,'neutronCohb':None             ,'neutronIncohb':None           ,'neutronCohXs':None     ,'neutronIncohXs':None    ,'atomicWeight':0      ,'covalentRadius':None   ,'equal':1.0  ,'atomicFormFactor':{}}


to pdbparser.Utilities.Database ca. line 182 (after definition of __atoms_databse__=OrderedDict() ) instantiating this Engine raises no error and I'm able to compute a PairDistributionConstraint instance from the PDB file

REMARK    Boundary Conditions: 40.10 0.00 -0.72 0.00 48.93 0.00 0.00 0.00 48.64
CRYST1  
40.104   48.929   48.645  90.00  91.03  90.00 P1            1
ORIGX1      
1.000000  0.000000  0.000000        0.00000
ORIGX2      
0.000000  1.000000  0.000000        0.00000
ORIGX3      
0.000000  0.000000  1.000000        0.00000
SCALE1      
0.024939  0.000000  0.000370        0.00000
SCALE2    
-0.000000  0.020438 -0.000000        0.00000
SCALE3      
0.000000  0.000000  0.020557        0.00000
ATOM      
0 Ba0  RRR     0       0.000   0.000   0.000 1.000 0.000          Ba  
ATOM      
1 Ba1  RRR     1       0.000   2.878   0.000 1.000 0.000          Ba  
ATOM      
2 Ba2  RRR     2       0.000   2.878  19.458 1.000 0.000          Ba  
ATOM      
3 Ba3  RRR     3       0.000   5.756   9.729 1.000 0.000          Ba  
ATOM      
4 Ba4  RRR     4       0.000   5.756  19.458 1.000 0.000          Ba  
ATOM      
5 Ba5  RRR     5       0.000   8.635  48.645 1.000 0.000          Ba  
ATOM      
6 Ba6  RRR     6       0.000   8.635   9.729 1.000 0.000          Ba  
ATOM      
7 Ba7  RRR     7       0.000   8.635  29.187 1.000 0.000          Ba  
ATOM      
8 Ba8  RRR     8       0.000   8.635  38.916 1.000 0.000          Ba  
ATOM      
9 Ba9  RRR     9       0.000  14.391   0.000 1.000 0.000          Ba  
ATOM    
10 Xx1  RRR    10       1.000   2.000   3.000 1.000 0.000          Xx
ATOM    
11 Xx2  RRR    11       4.000   5.000   6.000 1.000 0.000          Xx



Peter Metz

unread,
Feb 20, 2020, 12:48:22 PM2/20/20
to fullrmc
** by less of a hack, I mean that it could be confusing to insert a whole bunch of H atoms into a structure and assign them zero scattering length, as anyone looking only at the structure file would see a hydrogenous structure! "Xx" is implicitly not-an-atom and unlikely to be mistaken.

Bachir Aoun

unread,
Feb 20, 2020, 12:52:18 PM2/20/20
to fullrmc
Peter, that makes tons of sense. I will add this to pdbparser database library :)

Bachir Aoun

unread,
Feb 20, 2020, 12:53:23 PM2/20/20
to fullrmc
will wait to see if Robert agrees with your approach and will make it happen in pdbparser. 

Robert Koch

unread,
Feb 20, 2020, 12:57:33 PM2/20/20
to fullrmc
Peter's approach looks good to me.

Bachir Aoun

unread,
Feb 20, 2020, 1:04:22 PM2/20/20
to fullrmc
great Robert do me a favor and test this on your machine

import pdbparser.Utilities.Database

print(pdbparser.Utilities.Database)

This should point you to Database.py file. Please add the following to __atoms_database__

__atoms_database__["xx"] = {'name':'dummy'          ,'symbol':'Xx'  ,'group':0   ,'atomicNumber':0    ,'vdwRadius':0.0   ,'neutronCohb':0.0              ,'neutronIncohb':0.0            ,'neutronCohXs':0.0      ,'neutronIncohXs':0.0     ,'atomicWeight':0.0      ,'covalentRadius':0.0   ,'equal':1.0  ,'atomicFormFactor':{}}


Update your fullrmc pdb file and run it.

if all work for you the way you wants. I will update pdbparser and publish it asap

N.B atoms and elements name are case sensitive so Xx is not xx 

Robert Koch

unread,
Feb 20, 2020, 2:11:57 PM2/20/20
to fullrmc
I've made the changes and fullRMC seems to run without issue. I'll need more time to see if it yields the expected result, but I suspect this will do just fine.

My only comment is that maybe a name more instructive than "Xx" could be used? I would suggest "Void" but if we are limited to 2 characters, perhaps Va or Vo?

Cheers, and thanks for the quick turn around on this.
Rob
Reply all
Reply to author
Forward
0 new messages