Changeset 5285
- Timestamp:
- May 20, 2022 12:35:20 PM (16 months ago)
- Files:
-
- 3 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIctrlGUI.py
r5278 r5285 6484 6484 maximum=101, parent=None, trialMode=False, 6485 6485 seqLen=0, seqShow=3, 6486 style= wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER):6486 style=None): 6487 6487 6488 6488 self.trialRw = trialMode # used for Levenberg-Marquardt fitting … … 6494 6494 self.rows = 4 6495 6495 if self.trialRw: self.rows = 5 6496 if style is None: style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER 6496 6497 6497 6498 super(self.__class__,self).__init__(parent, wx.ID_ANY, title, -
trunk/GSASIIpath.py
r5264 r5285 1252 1252 '''.format(script) 1253 1253 subprocess.Popen(["osascript","-e",osascript]) 1254 1254 1255 #====================================================================== 1256 # conda/pip routines 1255 1257 def findConda(): 1256 1258 '''Determines if GSAS-II has been installed as g2conda or gsas2full … … 1324 1326 if sys.platform != "win32": proc.wait() 1325 1327 sys.exit() 1328 1329 def condaTest(): 1330 '''Returns True if it appears that Python is being run under Anaconda 1331 Python with conda present. Tests for conda environment vars and that 1332 the conda package is installed in the current environment. 1333 1334 :returns: True, if running under Conda 1335 ''' 1336 if not all([(i in os.environ) for i in ('CONDA_DEFAULT_ENV','CONDA_EXE', 'CONDA_PREFIX', 'CONDA_PYTHON_EXE')]): return False 1337 # is the conda package available? 1338 try: 1339 import conda.cli.python_api 1340 except: 1341 print('You do not have the conda package installed in this environment', 1342 '\nConsider using the "conda install conda" command') 1343 return False 1344 1345 # There is no foolproof way to check if someone activates conda 1346 # but then calls a different Python using its path... 1347 # ...If we are in the base environment then the conda Python 1348 # should be the same path as the one currently being run: 1349 if os.environ['CONDA_DEFAULT_ENV'] == 'base': 1350 try: 1351 if os.path.samefile(os.environ['CONDA_PYTHON_EXE'], 1352 sys.executable): return True 1353 except: 1354 return False 1355 1356 # ...If not in the base environment, what we can do is check if the 1357 # python we are running in shares the beginning part of its path with 1358 # the one in the base installation: 1359 return commonPath(os.environ['CONDA_PYTHON_EXE'],sys.executable) 1360 1361 def condaInstall(packageList): 1362 '''Installs one or more packages using the anaconda conda package 1363 manager. Can be used to install multiple packages and optionally 1364 use channels. 1365 1366 :param list packageList: a list of strings with name(s) of packages 1367 and optionally conda options. 1368 Examples:: 1369 1370 packageList=['gsl'] 1371 packageList=['-c','conda-forge','wxpython'] 1372 packageList=['numpy','scipy','matplotlib'] 1373 1374 :returns: None if the the command ran normally, or an error message 1375 if it did not. 1376 ''' 1377 import conda.cli.python_api 1378 try: 1379 (out, err, rc) = conda.cli.python_api.run_command( 1380 conda.cli.python_api.Commands.INSTALL,packageList 1381 # use_exception_handler=True#, stdout=sys.stdout, stderr=sys.stderr) 1382 ) 1383 #print('rc=',rc) 1384 print('Ran conda. output follows...') 1385 print(70*'='+'\n'+out+'\n'+70*'=') 1386 #print('err=',err) 1387 if rc != 0: return str(out) 1388 except Exception as msg: 1389 print("Error occurred, see below\n",msg) 1390 return "error occurred" 1391 return None 1392 1393 def fullsplit(fil,prev=None): 1394 '''recursive routine to split all levels of directory names 1395 ''' 1396 if prev is None: # first call: normalize and drop file name 1397 fil = os.path.normcase(os.path.abspath(os.path.dirname(fil))) 1398 prev = [] 1399 i,j = os.path.split(fil) 1400 if j: 1401 prev.insert(0,j) 1402 out = fullsplit(i,prev) 1403 else: 1404 return [i]+prev 1405 return out 1406 1407 def commonPath(file1,file2): 1408 '''Check if two files share the same path. Note that paths 1409 are considered the same if either file is in a subdirectory 1410 of the other, but not if they are in different subdirectories 1411 /a/b/c/x.x and /a/b/c/y.y share a path, as does /a/b/c/d/y.y 1412 but /a/b/c/d/x.x and /a/b/c/e/x.x do not. 1413 1414 :returns: True if the paths are common 1415 ''' 1416 1417 for i,j in zip(fullsplit(os.environ['CONDA_PYTHON_EXE']), 1418 fullsplit(sys.executable)): 1419 if i != j: return False 1420 return True 1421 1422 def pipInstall(packageList): 1423 '''Installs one or more packages using the pip package installer. 1424 Use of this should be avoided if conda can be used (see :func:`condaTest` 1425 to test for conda). Can be used to install multiple packages together. 1426 One can use pip options, but this is probably not needed. 1427 1428 :param list packageList: a list of strings with name(s) of packages 1429 Examples:: 1430 1431 packageList=['gsl'] 1432 packageList=['wxpython','matplotlib','scipy'] 1433 packageList=[r'\\Mac\Home\Scratch\wheels\pygsl-2.3.3-py3-none-any.whl'] 1434 packageList=['z:/Scratch/wheels/pygsl-2.3.3-py3-none-any.whl'] 1435 1436 :returns: None if the the command ran normally, or an error message 1437 if it did not. 1438 ''' 1439 try: 1440 subprocess.check_call([sys.executable, '-m', 'pip', 'install']+packageList) 1441 except Exception as msg: 1442 return msg 1443 return None 1326 1444 1327 1445 if __name__ == '__main__': -
trunk/GSASIIphsGUI.py
r5278 r5285 103 103 Angstr = chr(0x00c5) 104 104 105 RMCmisc = {} 105 106 #### phase class definitions ################################################################################ 106 107 class SymOpDialog(wx.Dialog): … … 4941 4942 def OnSeqReverse(event): 4942 4943 RMCPdict['SeqReverse'] = not RMCPdict['SeqReverse'] 4943 4944 4945 # --- FileSizer starts here 4944 4946 Indx = {} 4945 4947 mainSizer = wx.BoxSizer(wx.VERTICAL) … … 6241 6243 RMCsel.Bind(wx.EVT_RADIOBOX, OnRMCselect) 6242 6244 mainSizer.Add(RMCsel,0) 6245 RMCmisc['RMCnote'] = wx.StaticText(G2frame.FRMC) 6246 mainSizer.Add(RMCmisc['RMCnote']) 6243 6247 G2G.HorizontalLine(mainSizer,G2frame.FRMC) 6244 6248 mainSizer.Add(wx.StaticText(G2frame.FRMC, … … 6259 6263 bigSizer.Add(G2G.HelpButton(G2frame.FRMC,helpIndex=G2frame.dataWindow.helpKey)) 6260 6264 SetPhaseWindow(G2frame.FRMC,bigSizer) 6261 if G2frame.RMCchoice == 'fullrmc' and G2pwd.findfullrmc() is None: 6265 if G2frame.RMCchoice == 'PDFfit' and not checkPDFfit(G2frame): 6266 RMCmisc['RMCnote'].SetLabel('PDFfit may not be installed or operational') 6267 elif G2frame.RMCchoice == 'fullrmc' and G2pwd.findfullrmc() is None: 6262 6268 dlg = wx.MessageDialog(G2frame, 6263 6269 'The fullrmc code is not installed or could not be' … … 6385 6391 if sys.platform.lower().startswith('win'): 6386 6392 batch = open('pdffit2.bat','w') 6393 # TODO: should probably include an activate command here 6387 6394 batch.write(PDFfit_exec+' '+rname+'\n') 6388 6395 # batch.write('pause') … … 6393 6400 batch = open('pdffit2.sh','w') 6394 6401 batch.write('#!/bin/bash\n') 6402 # TODO: should probably include an activate command here 6395 6403 batch.write('cd ' + os.path.split(os.path.abspath(rname))[0] + '\n') 6396 6404 batch.write(PDFfit_exec + ' ' + os.path.abspath(rname) + '\n') … … 14565 14573 return 14566 14574 ChangePage(0) 14575 14576 def checkPDFfit(G2frame): 14577 '''Checks to see if PDFfit2 is available and can be imported. PDFfit2 can be installed 14578 in a separate Python interpreter (saved in the pdffit2_exec config variable). If this is 14579 defined, no attempt is made to check that it actually runs. 14580 Otherwise, if diffpy.PDFfit has been installed with conda/pip, it is checked if the 14581 install command. The fallback is to check if a .so/.pyd file has been supplied with 14582 GSAS-II. This requires that GSL (GNU Scientific Library) be installed. If the current 14583 Python is being run from conda, this will be loaded. 14584 14585 :returns: False if PDFfit2 cannot be run/accessed. True if it appears it can be run. 14586 ''' 14587 # if a separate Python interpreter has been specified, just use it, no checking 14588 if GSASIIpath.GetConfigValue('pdffit2_exec') is not None and is_exe( 14589 GSASIIpath.GetConfigValue('pdffit2_exec')): 14590 return True 14591 14592 # see if diffpy has been installed directly 14593 try: 14594 from diffpy.pdffit2 import PdfFit 14595 return True 14596 except: 14597 pass 14598 14599 # See if if we can import the GSAS-II supplied PDFfit 14600 pdffitloc = os.path.join(GSASIIpath.path2GSAS2,'PDFfit2') 14601 if pdffitloc not in sys.path: sys.path.append(pdffitloc) 14602 try: 14603 from diffpy.pdffit2 import PdfFit 14604 #pf = PdfFit() 14605 return True 14606 except Exception as err: 14607 pass 14608 #print('Failed to import PDFfit2 with error\n:'+str(err)) 14609 14610 if not os.path.exists(pdffitloc): 14611 print('PDFfit2 not found in GSAS-II \n\t(expected in '+pdffitloc+')') 14612 return False 14613 import glob 14614 if not glob.glob(os.path.join(GSASIIpath.binaryPath,'pdffit*')): 14615 msg = 'GSAS-II does not supply PDFfit2 for the version of Python that you are using' 14616 G2G.G2MessageBox(G2frame,msg,'Need PDFfit2') 14617 return False 14618 14619 # see if we can fix things so the GSAS-II version can be used 14620 if not GSASIIpath.condaTest(): 14621 msg = ('PDFfit2 is not running with this Python installation. '+ 14622 'Since Python was not installed under conda you need to install this yourself. '+ 14623 'pip install diffpy.pdffit2" may do this for you. You will likely need to '+ 14624 'install the GSL (GNU Software Library).') 14625 G2G.G2MessageBox(G2frame,msg,'No conda') 14626 return False 14627 # can we access conda? 14628 try: 14629 import conda.cli.python_api 14630 except: 14631 msg = ('You do not have the conda package installed in this '+ 14632 'environment so nothing can be installed.', 14633 '\n\nConsider using the "conda install conda" command') 14634 G2G.G2MessageBox(G2frame,msg,'conda import error') 14635 return False 14636 14637 if 'gsl' not in conda.cli.python_api.run_command(conda.cli.python_api.Commands.LIST,'gsl')[0].lower(): 14638 msg = ('The gsl (GNU Software Library), needed by PDFfit2, '+ 14639 ' is not installed in this Python. Do you want to have this installed?') 14640 dlg = wx.MessageDialog(G2frame,msg,caption='Install?', 14641 style=wx.YES_NO|wx.ICON_QUESTION) 14642 if dlg.ShowModal() != wx.ID_YES: 14643 dlg.Destroy() 14644 return False 14645 dlg.Destroy() 14646 wx.BeginBusyCursor() 14647 print('Preparing to install gsl. This may take a few minutes...') 14648 res = GSASIIpath.condaInstall(['gsl']) 14649 wx.EndBusyCursor() 14650 if res: 14651 msg = 'Installation of the GSL package failed with error:\n' + str(res) 14652 G2G.G2MessageBox(G2frame,msg,'Install GSL Error') 14653 14654 # GSAS-II supplied version for PDFfit now runs? 14655 if pdffitloc not in sys.path: sys.path.append(pdffitloc) 14656 try: 14657 from diffpy.pdffit2 import PdfFit 14658 #pf = PdfFit() 14659 except Exception as err: 14660 msg = 'Failed to import PDFfit2 with error\n:'+str(err) 14661 G2G.G2MessageBox(G2frame,msg,'PDFfit2 import error') 14662 return False 14663 return True -
trunk/GSASIIpwd.py
r5281 r5285 3324 3324 rundata = '''#!/usr/bin/env python 3325 3325 # -*- coding: utf-8 -*- 3326 import sys 3327 ''' 3326 import sys,os 3327 datadir = r'{:}' 3328 pathWrap = lambda f: os.path.join(datadir,f) 3329 '''.format(os.path.abspath(os.getcwd())) 3328 3330 PDFfit_exe,PDFfit_path = findPDFfit() # returns python loc and path(s) for pdffit 3329 3331 if not PDFfit_exe: … … 3352 3354 Nd += 1 3353 3355 dType = 'Xdata' 3354 filNam = os.path.abspath(filNam) 3355 rundata += "pf.read_data(r'%s', '%s', 30.0, %.4f)\n"%(filNam,dType[0],RMCPdict[dType]['qdamp'][0]) 3356 rundata += "pf.read_data(pathWrap(r'%s'), '%s', 30.0, %.4f)\n"%(filNam,dType[0],RMCPdict[dType]['qdamp'][0]) 3356 3357 rundata += 'pf.setdata(%d)\n'%Nd 3357 3358 rundata += 'pf.pdfrange(%d, %6.2f, %6.2f)\n'%(Nd,RMCPdict[dType]['Fitrange'][0],RMCPdict[dType]['Fitrange'][1]) … … 3367 3368 fName = 'Sequential_PDFfit.stru' 3368 3369 Np = 9 3369 rundata += "pf.read_struct( r'{:}')\n".format(os.path.abspath(fName))3370 rundata += "pf.read_struct(pathWrap(r'{:}'))\n".format(fName) 3370 3371 for item in ['delta1','delta2','sratio']: 3371 3372 if RMCPdict[item][1]: … … 3437 3438 fName = 'Sequential_PDFfit' 3438 3439 rfile = open('Seq_PDFfit_template.py','w') 3439 rundata += 'pf.save_pdf(1, "%s")\n'%(fName+'.fgr')3440 rundata += 'pf.save_pdf(1, pathWrap("%s"))\n'%(fName+'.fgr') 3440 3441 else: 3441 3442 fName = General['Name'].replace(' ','_')+'-PDFfit' … … 3446 3447 continue 3447 3448 Nd += 1 3448 rundata += 'pf.save_pdf(%d, "%s")\n'%(Nd,fName+file[0]+'.fgr')3449 rundata += 'pf.save_pdf(%d, pathWrap("%s"))\n'%(Nd,fName+file[0]+'.fgr') 3449 3450 3450 rundata += 'pf.save_struct(1, "%s")\n'%(fName+'.rstr')3451 rundata += 'pf.save_res( "%s")\n'%(fName+'.res')3451 rundata += 'pf.save_struct(1, pathWrap("%s"))\n'%(fName+'.rstr') 3452 rundata += 'pf.save_res(pathWrap("%s"))\n'%(fName+'.res') 3452 3453 3453 3454 rfile.writelines(rundata) -
trunk/docs/source/packages.rst
r5149 r5285 59 59 svn (subversion) conda package. This is not actually part of Python 60 60 and can be installed directly into your system's configuration. It is used by 61 GSAS-II to download updates to our code. 61 GSAS-II to download updates to our code. This can be skipped if svn 62 is installed directly (easy Linux, but a bit harder on MacOS and 63 Windows). 64 * conda: the conda package allows access to conda features from 65 inside Python. It will be used inceasingly by GSAS-II to 66 self-install software. The conda package is installed by default in 67 miniconda and anaconda but if you create an environment for GSAS-II 68 (`conda create -n <env> package-list...`), it will not be added 69 unless you request it specifically. 70 71 *Conda command*: 72 Here is a typical conda command used to install a GSAS-II compatible 73 Python interpreter:: 74 75 conda install wxpython numpy scipy matplotlib pyopengl pillow h5py imageio svn -c conda-forge 76 77 or to use a separate environment (here named ``g2python``), use:: 78 79 conda install -n g2python wxpython numpy scipy matplotlib pyopengl pillow h5py imageio svn conda -c conda-forge 80 81 Remember to activate using: ``<path>\Scripts\activate`` (windows); 82 ``source <path>/bin/activate`` (Mac/Linux). Note that one should add 83 ``g2python`` (etc.) at the end if using a conda environment. 84 85 Note that svn seems to be unsupported these days by Anaconda. For 86 Linux and MacOS, use subversion in conda-forge rather than svn. No 87 good solution yet for Windows. 62 88 63 89 Scripting Requirements … … 130 156 **fullrmc** 131 157 A modern software toolkit for large-box PDF & S(Q) fitting. Use 132 version 5.0 or later. 158 version 5.0 or later. The implementation for this is not 159 completed. 133 160 134 161 **Dysnomia** … … 136 163 extension of reflection sphere 137 164 165 **PDFfit2** 166 Small-box fitting of PDFs. This code is no longer supported, but is 167 still quite useful. It can be installed from conda into Python 168 versions up to Python 3.7, but is supplied for Windows within 169 GSAS-II for Python 3.7, 3.8 and 3.9 and for MacOS only with Python 170 3.7. 171 172 For other platforms/Python versions, it is probably best to use a 173 separate Python interpreter. 174 138 175 Supported Platforms 139 176 --------------------------------
Note: See TracChangeset
for help on using the changeset viewer.