@@ -274,6 +274,83 @@ def toLines(self, stru):
274274 lines .append (" %18.8f %17.8f %17.8f" % sigUij )
275275 return lines
276276
277+ def to_lines (self , stru ):
278+ """Convert `Structure` stru to a list of lines in PDFfit format.
279+
280+ Parameters
281+ ----------
282+ stru : Structure
283+ Structure to be converted.
284+
285+ Returns
286+ -------
287+ list of str
288+ List of lines in PDFfit format.
289+ """
290+ # build the stru_pdffit dictionary initialized from the defaults
291+ # in PDFFitStructure
292+ stru_pdffit = PDFFitStructure ().pdffit
293+ if stru .pdffit :
294+ stru_pdffit .update (stru .pdffit )
295+ lines = []
296+ # default values of standard deviations
297+ d_sigxyz = numpy .zeros (3 , dtype = float )
298+ d_sigo = 0.0
299+ d_sigU = numpy .zeros ((3 , 3 ), dtype = float )
300+ # here we can start
301+ line = "title " + stru .title
302+ lines .append (line .strip ())
303+ lines .append ("format pdffit" )
304+ lines .append ("scale %9.6f" % stru_pdffit ["scale" ])
305+ lines .append (
306+ "sharp %9.6f, %9.6f, %9.6f, %9.6f"
307+ % (
308+ stru_pdffit ["delta2" ],
309+ stru_pdffit ["delta1" ],
310+ stru_pdffit ["sratio" ],
311+ stru_pdffit ["rcut" ],
312+ )
313+ )
314+ lines .append ("spcgr " + stru_pdffit ["spcgr" ])
315+ if stru_pdffit .get ("spdiameter" , 0.0 ) > 0.0 :
316+ line = "shape sphere, %g" % stru_pdffit ["spdiameter" ]
317+ lines .append (line )
318+ if stru_pdffit .get ("stepcut" , 0.0 ) > 0.0 :
319+ line = "shape stepcut, %g" % stru_pdffit ["stepcut" ]
320+ lines .append (line )
321+ lat = stru .lattice
322+ lines .append (
323+ "cell %9.6f, %9.6f, %9.6f, %9.6f, %9.6f, %9.6f"
324+ % (lat .a , lat .b , lat .c , lat .alpha , lat .beta , lat .gamma )
325+ )
326+ lines .append ("dcell %9.6f, %9.6f, %9.6f, %9.6f, %9.6f, %9.6f" % tuple (stru_pdffit ["dcell" ]))
327+ lines .append ("ncell %9i, %9i, %9i, %9i" % (1 , 1 , 1 , len (stru )))
328+ lines .append ("atoms" )
329+ for a in stru :
330+ ad = a .__dict__
331+ lines .append (
332+ "%-4s %17.8f %17.8f %17.8f %12.4f"
333+ % (
334+ a .element .upper (),
335+ a .xyz [0 ],
336+ a .xyz [1 ],
337+ a .xyz [2 ],
338+ a .occupancy ,
339+ )
340+ )
341+ sigmas = numpy .concatenate ((ad .get ("sigxyz" , d_sigxyz ), [ad .get ("sigo" , d_sigo )]))
342+ lines .append (" %18.8f %17.8f %17.8f %12.4f" % tuple (sigmas ))
343+ sigU = ad .get ("sigU" , d_sigU )
344+ Uii = (a .U [0 ][0 ], a .U [1 ][1 ], a .U [2 ][2 ])
345+ Uij = (a .U [0 ][1 ], a .U [0 ][2 ], a .U [1 ][2 ])
346+ sigUii = (sigU [0 ][0 ], sigU [1 ][1 ], sigU [2 ][2 ])
347+ sigUij = (sigU [0 ][1 ], sigU [0 ][2 ], sigU [1 ][2 ])
348+ lines .append (" %18.8f %17.8f %17.8f" % Uii )
349+ lines .append (" %18.8f %17.8f %17.8f" % sigUii )
350+ lines .append (" %18.8f %17.8f %17.8f" % Uij )
351+ lines .append (" %18.8f %17.8f %17.8f" % sigUij )
352+ return lines
353+
277354 # Protected methods ------------------------------------------------------
278355
279356 def _parse_shape (self , line ):
0 commit comments