Changeset 2065
- Timestamp:
- Nov 22, 2015 5:56:33 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r2061 r2065 331 331 def OnImportGeneric(self,reader,readerlist,label,multiple=False, 332 332 usedRanIdList=[],Preview=True): 333 '''Used to import Phases or datasets using reader objects 334 subclassed from :class:`GSASIIIO.ImportPhase`, 333 '''Used for all imports, including Phases, datasets, images... 334 335 Called from :meth:`GSASII.OnImportPhase`, :meth:`GSASII.OnImportImage`, 336 :meth:`GSASII.OnImportSfact`, :meth:`GSASII.OnImportPowder` and 337 :meth:`GSASII.OnImportSmallAngle` 338 339 Uses reader_objects subclassed from :class:`GSASIIIO.ImportPhase`, 335 340 :class:`GSASIIIO.ImportStructFactor`, 336 341 :class:`GSASIIIO.ImportPowderData`, … … 342 347 selected in the Open File dialog. 343 348 344 :param reader object reader: This will be a reference to349 :param reader_object reader: This will be a reference to 345 350 a particular object to be used to read a file or None, 346 351 if every appropriate reader should be used. … … 348 353 :param list readerlist: a list of reader objects appropriate for 349 354 the current read attempt. At present, this will be either 350 self.ImportPhaseReaderlist, self.ImportSfactReaderlist or 351 self.ImportPowderReaderlist (defined in _init_Imports from 352 the files found in the path), but in theory this list could 353 be tailored. Used only when reader is None. 355 self.ImportPhaseReaderlist, self.ImportSfactReaderlist 356 self.ImportPowderReaderlist or self.ImportImageReaderlist 357 (defined in _init_Imports from the files found in the path), 358 but in theory this list could be tailored. 359 Used only when reader is None. 354 360 355 361 :param str label: string to place on the open file dialog: … … 2248 2254 self.Image = 0 2249 2255 self.oldImagefile = '' # the name of the last image file read 2256 self.oldImageTag = None # the name of the tag for multi-image files 2250 2257 self.ImageZ = [] # this contains the image plotted and used for integration 2251 2258 # self.ImageZ and self.oldImagefile are set in GSASIIplot.PlotImage 2252 # and GSASIIIO. ReadImageData (GetImageData soon)2259 # and GSASIIIO.GetImageData 2253 2260 # any changes to self.ImageZ should initialize self.oldImagefile to force a reread 2254 2261 self.Integrate = 0 2255 2262 self.imageDefault = {} 2256 2263 self.IntgOutList = [] # list of integration tree item Ids created in G2IO.SaveIntegration 2257 self.AutointPWDRnames = [] # list of autoint created PWDR tree item names 2264 self.AutointPWDRnames = [] # list of autoint created PWDR tree item names (to be deleted on a reset) 2258 2265 self.autoIntFrame = None 2259 self.IntegratedList = [] # list of integrated image files2266 self.IntegratedList = [] # list of already integrated IMG tree items 2260 2267 self.Sngl = False 2261 2268 self.ifGetRing = False … … 2425 2432 2426 2433 def OnImageRead(self,event): 2427 'Called to read in an image in any known format' 2434 '''Called to read in an image in any known format. *** Depreciated. *** 2435 Note: When removed, G2IO.ReadLoadImage can also be removed 2436 ''' 2428 2437 G2G.G2MessageBox(self,'Please use the Import/Image/... menu item rather than this','depreciating menu item') 2429 2438 self.CheckNotebook() … … 2723 2732 if 'IMG' in name: 2724 2733 TextList.append([0.0,name]) 2725 DataList.append(self.PatternTree.GetI temPyData(item)) #Size,Image2734 DataList.append(self.PatternTree.GetImageLoc(item)) #Size,Image,Tag 2726 2735 Data = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,item,'Image Controls')) 2727 2736 item, cookie = self.PatternTree.GetNextChild(self.root, cookie) … … 2739 2748 for i,item in enumerate(result[:-1]): 2740 2749 scale,name = item 2741 data = DataList[i]2742 2750 if scale: 2743 2751 Found = True 2744 2752 Comments.append("%10.3f %s" % (scale,' * '+name)) 2745 Npix,imagefile = data2746 image = G2IO.GetImageData(self,imagefile,imageOnly=True )2753 Npix,imagefile,imagetag = DataList[i] 2754 image = G2IO.GetImageData(self,imagefile,imageOnly=True,ImageTag=imagetag) 2747 2755 if First: 2748 2756 newImage = np.zeros_like(image) -
trunk/GSASIIIO.py
r2056 r2065 278 278 def ReadLoadImage(imagefile,G2frame): 279 279 '''Read a GSAS-II image file and load it into the data tree 280 Called only from GSASII.OnImageRead (depreciated). 280 281 ''' 281 282 # if a zip file, open and extract … … 284 285 if extractedfile is not None and extractedfile != imagefile: 285 286 imagefile = extractedfile 286 Comments,Data,Npix,Image = GetImageData(G2frame,imagefile) 287 Comments,Data,Npix,Image = GetImageData(G2frame,imagefile) # can only read 1st image 287 288 if Comments: 288 289 LoadImage2Tree(imagefile,G2frame,Comments,Data,Npix,Image) 289 290 290 291 def LoadImage2Tree(imagefile,G2frame,Comments,Data,Npix,Image): 291 '''Load an image into the tree 292 '''Load an image into the tree. Saves the location of the image, as well as the 293 ImageTag (where there is more than one image in the file), if defined. 292 294 ''' 293 294 295 ImgNames = [] 295 296 if G2frame.PatternTree.GetCount(): # get a list of existing Image entries … … 299 300 if name.startswith('IMG'): ImgNames.append(name) 300 301 item, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie) 301 TreeName = G2obj.MakeUniqueLabel('IMG '+os.path.basename(imagefile),ImgNames) 302 TreeLbl = 'IMG '+os.path.basename(imagefile) 303 ImageTag = Data.get('ImageTag') 304 if ImageTag: 305 TreeLbl += ' #'+str(ImageTag) 306 imageInfo = (imagefile,ImageTag) 307 else: 308 imageInfo = imagefile 309 TreeName = G2obj.MakeUniqueLabel(TreeLbl,ImgNames) 302 310 Id = G2frame.PatternTree.AppendItem(parent=G2frame.root,text=TreeName) 303 311 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Comments'),Comments) … … 354 362 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Stress/Strain'), 355 363 {'Type':'True','d-zero':[],'Sample phi':0.0,'Sample z':0.0,'Sample load':0.0}) 356 G2frame.PatternTree.SetItemPyData(Id,[Npix,image file])364 G2frame.PatternTree.SetItemPyData(Id,[Npix,imageInfo]) 357 365 G2frame.PickId = Id 358 366 G2frame.PickIdText = G2frame.GetTreeItemsList(G2frame.PickId) 359 367 G2frame.Image = Id 360 361 def ReadImageData(G2frame,imagefile,imageOnly=False):362 '''Read a single image with an image importer. Replacement for GetImageData368 369 def GetImageData(G2frame,imagefile,imageOnly=False,ImageTag=None): 370 '''Read a single image with an image importer. 363 371 364 372 :param wx.Frame G2frame: main GSAS-II Frame and data object. … … 366 374 :param bool imageOnly: If True return only the image, 367 375 otherwise (default) return more (see below) 376 :param int/str ImageTag: specifies a particular image to be read from a file. 377 First image is read if None (default). 368 378 369 379 :returns: an image as a numpy array or a list of four items: … … 394 404 if rd.errors: 395 405 errorReport += ': '+rd.errors 396 continue 406 continue 397 407 rdbuffer = {} # create temporary storage for file reader 398 408 if imageOnly: … … 401 411 ParentFrame = G2frame 402 412 if GSASIIpath.GetConfigValue('debug'): 403 flag = rd.Reader(imagefile,fp,ParentFrame )413 flag = rd.Reader(imagefile,fp,ParentFrame,blocknum=ImageTag) 404 414 else: 405 415 flag = False 406 416 try: 407 flag = rd.Reader(imagefile,fp,ParentFrame )417 flag = rd.Reader(imagefile,fp,ParentFrame,blocknum=ImageTag) 408 418 except rd.ImportException as detail: 409 419 rd.errors += "\n Read exception: "+str(detail) … … 427 437 print('Error messages(s)\n'+errorReport) 428 438 raise Exception('No image read') 429 def GetImageData(G2frame,imagefile,imageOnly=False): 430 return ReadImageData(G2frame,imagefile,imageOnly) 439 440 def ReadImages(G2frame,imagefile): 441 '''Read one or more images from a file and put them into the Tree 442 using image importers. Called only in :meth:`AutoIntFrame.OnTimerLoop`. 443 444 :param wx.Frame G2frame: main GSAS-II Frame and data object. 445 :param str imagefile: name of image file 446 447 :returns: a list of the id's of the IMG tree items created 448 ''' 449 # determine which formats are compatible with this file 450 primaryReaders = [] 451 secondaryReaders = [] 452 for rd in G2frame.ImportImageReaderlist: 453 flag = rd.ExtensionValidator(imagefile) 454 if flag is None: 455 secondaryReaders.append(rd) 456 elif flag: 457 primaryReaders.append(rd) 458 if len(secondaryReaders) + len(primaryReaders) == 0: 459 print('Error: No matching format for file '+filename) 460 raise Exception('No image read') 461 errorReport = '' 462 fp = open(imagefile,'Ur') 463 rdbuffer = {} # create temporary storage for file reader 464 for rd in primaryReaders+secondaryReaders: 465 rd.ReInitialize() # purge anything from a previous read 466 fp.seek(0) # rewind 467 rd.errors = "" # clear out any old errors 468 if not rd.ContentsValidator(fp): # rejected on cursory check 469 errorReport += "\n "+rd.formatName + ' validator error' 470 if rd.errors: 471 errorReport += ': '+rd.errors 472 continue 473 ParentFrame = G2frame 474 block = 0 475 repeat = True 476 CreatedIMGitems = [] 477 while repeat: # loop if the reader asks for another pass on the file 478 block += 1 479 repeat = False 480 if GSASIIpath.GetConfigValue('debug'): 481 flag = rd.Reader(imagefile,fp,ParentFrame,blocknum=block,Buffer=rdbuffer) 482 else: 483 flag = False 484 try: 485 flag = rd.Reader(imagefile,fp,ParentFrame,blocknum=block,Buffer=rdbuffer) 486 except rd.ImportException as detail: 487 rd.errors += "\n Read exception: "+str(detail) 488 except Exception as detail: 489 import traceback 490 rd.errors += "\n Unhandled read exception: "+str(detail) 491 rd.errors += "\n Traceback info:\n"+str(traceback.format_exc()) 492 if flag: # this read succeeded 493 if rd.Image is None: 494 raise Exception('No image read. Strange!') 495 if GSASIIpath.GetConfigValue('Transpose'): 496 print 'Transposing Image!' 497 rd.Image = rd.Image.T 498 LoadImage2Tree(imagefile,G2frame,rd.Comments,rd.Data,rd.Npix,rd.Image) 499 repeat = rd.repeat 500 CreatedIMGitems.append(G2frame.Image) 501 if CreatedIMGitems: return CreatedIMGitems 502 else: 503 print('Error reading file '+filename) 504 print('Error messages(s)\n'+errorReport) 505 return [] 506 #raise Exception('No image read') 431 507 432 508 def PutG2Image(filename,Comments,Data,Npix,image): … … 437 513 return 438 514 439 def GetG2Image(filename): 440 'Read an image as a python pickle' 441 File = open(filename,'rb') 442 Comments,Data,Npix,image = cPickle.load(File) 443 File.close() 444 return Comments,Data,Npix,image 445 515 # should get moved to importer when ready to test 446 516 def GetEdfData(filename,imageOnly=False): 447 517 'Read European detector data edf file' … … 507 577 return head,data,Npix,image 508 578 579 # should get moved to importer when ready to test 509 580 def GetRigaku(filename,imageOnly=False): 510 581 'Read Rigaku R-Axis IV image file' … … 538 609 return head,data,Npix,image 539 610 540 def GetGEsumData(filename,imageOnly=False): 541 'Read SUM file as produced at 1-ID from G.E. images' 542 import struct as st 543 import array as ar 544 if not imageOnly: 545 print 'Read GE sum file: ',filename 546 File = open(filename,'rb') 547 if '.sum' in filename or '.cor' in filename: 548 head = ['GE detector sum or cor data from APS 1-ID',] 549 sizexy = [2048,2048] 550 elif '.avg' in filename or '.ge' in filename: 551 head = ['GE detector avg or ge* data from APS 1-ID',] 552 sizexy = [2048,2048] 553 else: 554 head = ['GE detector raw data from APS 1-ID',] 555 File.seek(18) 556 size,nframes = st.unpack('<ih',File.read(6)) 557 sizexy = [2048,2048] 558 pos = 8192 559 File.seek(pos) 560 Npix = sizexy[0]*sizexy[1] 561 if '.sum' in filename or '.cor' in filename: 562 image = np.array(ar.array('f',File.read(4*Npix)),dtype=np.int32) 563 elif '.avg' in filename or '.ge' in filename: 564 image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 565 else: 566 image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 567 while nframes > 1: 568 image += np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 569 nframes -= 1 570 image = np.reshape(image,(sizexy[1],sizexy[0])) 571 data = {'pixelSize':[200,200],'wavelength':0.15,'distance':250.0,'center':[204.8,204.8],'size':sizexy} 572 File.close() 573 if imageOnly: 574 return image 575 else: 576 return head,data,Npix,image 577 611 # should get moved to importer when ready to test 578 612 def GetImgData(filename,imageOnly=False): 579 613 'Read an ADSC image file' … … 627 661 return lines[1:-2],data,Npix,image 628 662 663 # should get moved to importer when ready to test 629 664 def GetMAR345Data(filename,imageOnly=False): 630 665 'Read a MAR-345 image plate image' … … 687 722 return head,data,Npix,image 688 723 724 # should get moved to importer when ready to test 689 725 def GetPNGData(filename,imageOnly=False): 690 726 '''Read an image in a png format, assumes image is converted from CheMin tif file … … 703 739 else: 704 740 return Comments,Data,Npix,Image.T 705 706 741 707 #def GetTifData(filename,imageOnly=False):708 # import struct as st709 # import array as ar710 # File = open(filename,'rb')711 # dataType = 5712 # try:713 # Meta = open(filename+'.metadata','Ur')714 # head = Meta.readlines()715 # for line in head:716 # line = line.strip()717 # if 'dataType=' in line:718 # dataType = int(line.split('=')[1])719 # Meta.close()720 # except IOError:721 # print 'no metadata file found - will try to read file anyway'722 # head = ['no metadata file found',]723 #724 # tag = File.read(2)725 # byteOrd = '<'726 # if tag == 'II' and int(st.unpack('<h',File.read(2))[0]) == 42: #little endian727 # IFD = int(st.unpack(byteOrd+'i',File.read(4))[0])728 # elif tag == 'MM' and int(st.unpack('>h',File.read(2))[0]) == 42: #big endian729 # byteOrd = '>'730 # IFD = int(st.unpack(byteOrd+'i',File.read(4))[0])731 # else:732 # lines = ['not a detector tiff file',]733 # return lines,0,0,0734 # File.seek(IFD) #get number of directory entries735 # NED = int(st.unpack(byteOrd+'h',File.read(2))[0])736 # IFD = {}737 # for ied in range(NED):738 # Tag,Type = st.unpack(byteOrd+'Hh',File.read(4))739 # nVal = st.unpack(byteOrd+'i',File.read(4))[0]740 # if Type == 1:741 # Value = st.unpack(byteOrd+nVal*'b',File.read(nVal))742 # elif Type == 2:743 # Value = st.unpack(byteOrd+'i',File.read(4))744 # elif Type == 3:745 # Value = st.unpack(byteOrd+nVal*'h',File.read(nVal*2))746 # x = st.unpack(byteOrd+nVal*'h',File.read(nVal*2))747 # elif Type == 4:748 # Value = st.unpack(byteOrd+nVal*'i',File.read(nVal*4))749 # elif Type == 5:750 # Value = st.unpack(byteOrd+nVal*'i',File.read(nVal*4))751 # elif Type == 11:752 # Value = st.unpack(byteOrd+nVal*'f',File.read(nVal*4))753 # IFD[Tag] = [Type,nVal,Value]754 ## print Tag,IFD[Tag]755 # sizexy = [IFD[256][2][0],IFD[257][2][0]]756 # [nx,ny] = sizexy757 # Npix = nx*ny758 # if 272 in IFD:759 # ifd = IFD[272]760 # File.seek(ifd[2][0])761 # S = File.read(ifd[1])762 # if 'PILATUS' in S:763 # tifType = 'Pilatus'764 # dataType = 0765 # pixy = (172,172)766 # File.seek(4096)767 # if not imageOnly:768 # print 'Read Pilatus tiff file: ',filename769 # image = ar.array('L',File.read(4*Npix))770 # image = np.array(np.asarray(image),dtype=np.int32)771 # elif 262 in IFD and IFD[262][2][0] > 4:772 # tifType = 'DND'773 # pixy = (158,158)774 # File.seek(512)775 # if not imageOnly:776 # print 'Read DND SAX/WAX-detector tiff file: ',filename777 # image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)778 # elif sizexy == [1536,1536]:779 # tifType = 'APS Gold'780 # pixy = (150,150)781 # File.seek(64)782 # if not imageOnly:783 # print 'Read Gold tiff file:',filename784 # image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)785 # elif sizexy == [2048,2048] or sizexy == [1024,1024] or sizexy == [3072,3072]:786 # if IFD[273][2][0] == 8:787 # if IFD[258][2][0] == 32:788 # tifType = 'PE'789 # pixy = (200,200)790 # File.seek(8)791 # if not imageOnly:792 # print 'Read APS PE-detector tiff file: ',filename793 # if dataType == 5:794 # image = np.array(ar.array('f',File.read(4*Npix)),dtype=np.float32)795 # else:796 # image = np.array(ar.array('I',File.read(4*Npix)),dtype=np.int32)797 # elif IFD[273][2][0] == 4096:798 # if sizexy[0] == 3072:799 # pixy = (73,73)800 # tifType = 'MAR225'801 # else:802 # pixy = (158,158)803 # tifType = 'MAR325'804 # File.seek(4096)805 # if not imageOnly:806 # print 'Read MAR CCD tiff file: ',filename807 # image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)808 # elif IFD[273][2][0] == 512:809 # tiftype = '11-ID-C'810 # pixy = [200,200]811 # File.seek(512)812 # if not imageOnly:813 # print 'Read 11-ID-C tiff file: ',filename814 # image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)815 # elif sizexy == [4096,4096]:816 # if IFD[273][2][0] == 8:817 # if IFD[258][2][0] == 16:818 # tifType = 'scanCCD'819 # pixy = (9,9)820 # File.seek(8)821 # if not imageOnly:822 # print 'Read APS scanCCD tiff file: ',filename823 # image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)824 # elif IFD[273][2][0] == 4096:825 # tifType = 'Rayonix'826 # pixy = (73.242,73.242)827 # File.seek(4096)828 # if not imageOnly:829 # print 'Read Rayonix MX300HE tiff file: ',filename830 # image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)831 ## elif sizexy == [960,960]:832 ## tiftype = 'PE-BE'833 ## pixy = (200,200)834 ## File.seek(8)835 ## if not imageOnly:836 ## print 'Read Gold tiff file:',filename837 ## image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)838 #839 # else:840 # lines = ['not a known detector tiff file',]841 # return lines,0,0,0842 #843 # image = np.reshape(image,(sizexy[1],sizexy[0]))844 # center = [pixy[0]*sizexy[0]/2000,pixy[1]*sizexy[1]/2000]845 # data = {'pixelSize':pixy,'wavelength':0.10,'distance':100.0,'center':center,'size':sizexy}846 # File.close()847 # if imageOnly:848 # return image849 # else:850 # return head,data,Npix,image851 #852 742 def ProjFileOpen(G2frame): 853 743 'Read a GSAS-II project file and load into the G2 data tree' … … 1761 1651 '''Defines a base class for the reading of images 1762 1652 1763 Structure factors areread with a call to :meth:`GSASII.GSASII.OnImportImage`1653 Images are intially read with a call to :meth:`GSASII.GSASII.OnImportImage` 1764 1654 which in turn calls :meth:`GSASII.GSASII.OnImportGeneric`, which calls 1765 1655 methods :meth:`ExtensionValidator`, :meth:`ContentsValidator` and 1766 :meth:`Reader`. 1656 :meth:`Reader`. Images are also reread with :func:`GSASIIIO.GetImageData` 1767 1657 1768 1658 See :ref:`Writing a Import Routine<Import_Routines>` 1769 1659 for an explanation on how to use import classes in general. The specifics 1770 1660 for reading an image requires that the ``Reader()`` routine in the import 1771 class need to do only a few things:...1661 class should set: 1772 1662 1773 (should load :attr:`RefDict` item ``'RefList'`` with the reflection list, 1774 (and set :attr:`Parameters` with the instrument parameters 1775 (initialized with :meth:`InitParameters` and set with :meth:`UpdateParameters`). 1663 * :attr:`Comments` (a list of strings), 1664 * :attr:`Data` (a dict defining image parameters), 1665 * :attr:`Npix` (the number of pixels in the image) 1666 * :attr:`Image` (the actual image) 1667 * optionally: :attr:`repeat` (set to True if there are additional images to 1668 read in the file) 1669 1670 1671 Note that the above is initialized with :meth:`InitParameters`. 1776 1672 ''' 1777 1673 def __init__(self,formatName,longFormatName=None,extensionlist=[], … … 1792 1688 self.Npix = 0 1793 1689 self.Image = None 1794 1795 def LoadImage(self,ParentFrame,imagefile): 1690 self.repeat = False 1691 1692 def LoadImage(self,ParentFrame,imagefile,imagetag=None): 1796 1693 '''Optionally, call this after reading in an image to load it into the tree. 1797 This doessaves time by preventing a reread of the same information.1694 This saves time by preventing a reread of the same information. 1798 1695 ''' 1799 1696 if ParentFrame: 1800 1697 ParentFrame.ImageZ = self.Image # store the image for plotting 1801 1698 ParentFrame.oldImagefile = imagefile # save the name of the last image file read 1802 1699 ParentFrame.oldImageTag = imagetag # save the tag of the last image file read 1803 1700 1804 1701 ###################################################################### -
trunk/GSASIIctrls.py
r2036 r2065 208 208 else: 209 209 raise Exception("No phases found ") 210 211 def GetImageLoc(self,TreeId): 212 '''Get Image data from the Tree. Handles cases where the 213 image name is specified, as well as where the image file name is 214 a tuple containing the image file and an image number 215 ''' 216 217 size,imagefile = self.GetItemPyData(TreeId) 218 if type(imagefile) is tuple or type(imagefile) is list: 219 return size,imagefile[0],imagefile[1] 220 else: 221 return size,imagefile,None 210 222 211 223 ################################################################################ -
trunk/GSASIIimgGUI.py
r2060 r2065 143 143 if darkImg: 144 144 Did = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, darkImg) 145 Npix,imagefile = G2frame.PatternTree.GetItemPyData(Did)146 darkImage = G2IO.GetImageData(G2frame,imagefile,True )145 Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(Did) 146 darkImage = G2IO.GetImageData(G2frame,imagefile,True,ImageTag=imagetag) 147 147 sumImg += darkImage*darkScale 148 148 backImg,backScale = data['background image'] 149 149 if backImg: #ignores any transmission effect in the background image 150 150 Bid = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, backImg) 151 Npix,imagefile = G2frame.PatternTree.GetItemPyData(Bid)152 backImage = G2IO.GetImageData(G2frame,imagefile,True )151 Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(Bid) 152 backImage = G2IO.GetImageData(G2frame,imagefile,True,ImageTag=imagetag) 153 153 Bdata = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Bid,'Image Controls')) 154 154 BdarkImg,BdarkScale = Bdata['dark image'] 155 155 if BdarkImg: 156 156 BDid = G2gd.GetPatternTreeItemId(G2frame, G2frame.root,BdarkImg) 157 Npix,imagefile = G2frame.PatternTree.GetItemPyData(BDid)158 BdarkImage = G2IO.GetImageData(G2frame,imagefile,True )157 Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(BDid) 158 BdarkImage = G2IO.GetImageData(G2frame,imagefile,True,ImageTag=imagetag) 159 159 backImage += BdarkImage*BdarkScale 160 160 sumImg += backImage*backScale … … 206 206 try: 207 207 id = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, name) 208 Npix,imagefile = G2frame.PatternTree.GetItemPyData(id)209 image = G2IO.GetImageData(G2frame,imagefile,True )208 Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(id) 209 image = G2IO.GetImageData(G2frame,imagefile,True,ImageTag=imagetag) 210 210 backImage = [] 211 211 if Data['background image'][0]: … … 213 213 backScale = Data['background image'][1] 214 214 id = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, backImg) 215 Npix,imagefile = G2frame.PatternTree.GetItemPyData(id)216 backImage = G2IO.GetImageData(G2frame,imagefile,True )*backScale215 Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(id) 216 backImage = G2IO.GetImageData(G2frame,imagefile,True,ImageTag=imagetag)*backScale 217 217 FlatBkg = Data.get('Flat Bkg',0.0) 218 218 try: … … 1647 1647 goodnames.append(name) 1648 1648 id = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, name) 1649 Npix,imagefile = G2frame.PatternTree.GetItemPyData(Id)1650 image = G2IO.GetImageData(G2frame,imagefile,True )1649 Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(Id) 1650 image = G2IO.GetImageData(G2frame,imagefile,True,ImageTag=imagetag) 1651 1651 dark = Controls['dark image'] 1652 1652 if dark[0]: 1653 darkfile = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,1654 G2frame.root,dark[0]))[1]1655 darkImg = G2IO.GetImageData(G2frame,darkfile, imageOnly=True)1653 id = G2gd.GetPatternTreeItemId(G2frame, G2frame.root,dark[0]) 1654 Npix,darkfile,imagetag = G2frame.PatternTree.GetImageLoc(id) 1655 darkImg = G2IO.GetImageData(G2frame,darkfile,True,ImageTag=imagetag) 1656 1656 image += dark[1]*darkImg 1657 1657 G2img.FitStrSta(image,StaCtrls,Controls) -
trunk/GSASIIplot.py
r2062 r2065 3950 3950 except TypeError: 3951 3951 pass 3952 size,imagefile = G2frame.PatternTree.GetItemPyData(G2frame.Image)3952 size,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(G2frame.Image) 3953 3953 dark = Data.get('dark image',[0,'']) 3954 if dark[0]: 3955 darkfile = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame, 3956 G2frame.root,dark[0]))[1] 3957 if imagefile != G2frame.oldImagefile or dark[0]: # always reread with dark correction 3954 if imagefile != G2frame.oldImagefile or G2frame.oldImageTag != imagetag or dark[0]: # always reread to apply dark correction 3958 3955 imagefile = G2IO.CheckImageFile(G2frame,imagefile) 3959 3956 if not imagefile: 3960 3957 G2frame.G2plotNB.Delete('2D Powder Image') 3961 3958 return 3962 G2frame.PatternTree.SetItemPyData(G2frame.Image,[size,imagefile]) 3963 G2frame.ImageZ = G2IO.GetImageData(G2frame,imagefile,imageOnly=True) 3959 if imagetag: 3960 G2frame.PatternTree.SetItemPyData(G2frame.Image, 3961 [size,(imagefile,imagetag)]) 3962 else: 3963 G2frame.PatternTree.SetItemPyData(G2frame.Image,[size,imagefile]) 3964 G2frame.ImageZ = G2IO.GetImageData(G2frame,imagefile,imageOnly=True,ImageTag=imagetag) 3964 3965 if dark[0]: 3965 darkImg = G2IO.GetImageData(G2frame,darkfile,imageOnly=True) 3966 dsize,darkfile,darktag = G2frame.PatternTree.GetImageLoc( 3967 G2gd.GetPatternTreeItemId(G2frame,G2frame.root,dark[0])) 3968 darkImg = G2IO.GetImageData(G2frame,darkfile,imageOnly=True,ImageTag=darktag) 3966 3969 G2frame.ImageZ += dark[1]*darkImg 3967 3970 G2frame.oldImagefile = imagefile # save name of the last image file read 3971 G2frame.oldImageTag = imagetag # save tag of the last image file read 3968 3972 else: 3969 3973 if GSASIIpath.GetConfigValue('debug'): print('Skipping image reread') -
trunk/GSASIIpy3.py
r2060 r2065 156 156 else: # larger numbers, remove decimal places 157 157 decimals = sigfigs - 1 - int(np.log10(abs(val))) 158 print decimals,maxdigits,val159 158 if decimals <= 0: 160 159 fmt = "{" + (":{:d}.0f".format(maxdigits))+"}." -
trunk/autoint.py
r2048 r2065 38 38 return 39 39 40 # index of image tree items by file name:41 image Dict = {G2frame.PatternTree.GetItemPyData(42 G2gd.GetPatternTreeItemId(G2frame,G2frame.root,img))[1]:43 G2gd.GetPatternTreeItemId(G2frame,G2frame.root,img)44 for img in G2gd.GetPatternTreeDataNames(G2frame,['IMG '])}45 createdImageIdList = []46 # loop over files that are found, reading in new ones40 # Create a list of image files that have already been read 41 imageFileList = [] 42 for img in G2gd.GetPatternTreeDataNames(G2frame,['IMG ']): 43 imgId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,img) 44 size,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(imgId) 45 if imagefile not in imageFileList: imageFileList.append(imagefile) 46 # loop over image files matching glob, reading in new ones 47 47 for newImage in self.currImageList: 48 if newImage in self.G2frame.IntegratedList: continue # already integrated 49 # has this image already been loaded? 50 if newImage not in imageDict: 51 Comments,Data,Npix,Image = G2IO.GetImageData(G2frame,newImage) 52 if not Npix: 53 print('problem reading '+newImage) 54 continue 55 G2IO.LoadImage2Tree(newImage,G2frame,Comments,Data,Npix,Image) 56 else: 57 G2frame.Image = imageDict[newImage] 58 # update controls from master 59 controlsDict = G2frame.PatternTree.GetItemPyData( 60 G2gd.GetPatternTreeItemId(G2frame,G2frame.Image, 'Image Controls')) 61 controlsDict.update(self.ImageControls) 62 # update masks from master 63 ImageMasks = G2frame.PatternTree.GetItemPyData( 64 G2gd.GetPatternTreeItemId(G2frame,G2frame.Image, 'Masks')) 65 createdImageIdList.append(G2frame.Image) # save IMG Id 66 self.G2frame.IntegratedList.append(newImage) # save name of image so we don't process it again 67 #print('debug: read '+newImage) 68 69 # now integrate the images we have read 70 for newImagId in createdImageIdList: 71 G2frame.Image = newImagId 48 if newImage in imageFileList: continue # already read 49 for imgId in G2IO.ReadImages(G2frame,newImage): 50 # update controls from master 51 controlsDict = G2frame.PatternTree.GetItemPyData( 52 G2gd.GetPatternTreeItemId(G2frame,imgId, 'Image Controls')) 53 controlsDict.update(self.ImageControls) 54 # update masks from master 55 ImageMasks = G2frame.PatternTree.GetItemPyData( 56 G2gd.GetPatternTreeItemId(G2frame,imgId, 'Masks')) 57 ImageMasks.update(self.ImageMasks) 58 # now integrate the images that have not already been processed before 59 for img in G2gd.GetPatternTreeDataNames(G2frame,['IMG ']): 60 if img in G2frame.IntegratedList: continue 61 G2frame.IntegratedList.append(img) 62 imgId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,img) 63 G2frame.Image = imgId 72 64 G2frame.PickId = G2gd.GetPatternTreeItemId(G2frame,G2frame.Image, 'Image Controls') 73 65 # integrate in this entry 74 size,imagefile = G2frame.PatternTree.GetItemPyData(G2frame.Image) 66 size,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(imgId) 67 G2frame.ImageZ = G2IO.GetImageData(G2frame,imagefile,True,imagetag) 75 68 masks = G2frame.PatternTree.GetItemPyData( 76 69 G2gd.GetPatternTreeItemId(G2frame,G2frame.Image, 'Masks')) 77 70 data = G2frame.PatternTree.GetItemPyData(G2frame.PickId) 78 G2frame.ImageZ = G2IO.GetImageData(G2frame,imagefile,True)79 71 self.oldImagefile = '' # mark image as changed; reread as needed 80 72 # simulate a Image Controls press, since that is where the … … 92 84 for Id in G2frame.IntgOutList: 93 85 treename = G2frame.PatternTree.GetItemText(Id) 94 self.G2frame.AutointPWDRnames.append(treename)86 G2frame.AutointPWDRnames.append(treename) 95 87 Sdata = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Sample Parameters')) 96 88 # determine the name for the current file … … 122 114 ''' 123 115 print '\nStarting new autointegration\n' 116 G2frame = self.G2frame 124 117 # show current IMG base 125 self.ControlBaseLbl.SetLabel( self.G2frame.PatternTree.GetItemText(self.G2frame.Image))118 self.ControlBaseLbl.SetLabel(G2frame.PatternTree.GetItemText(G2frame.Image)) 126 119 if self.params['Mode'] == 'file': 127 120 'get file info' … … 131 124 # items that should not be copied 132 125 self.ImageControls = copy.deepcopy( 133 self.G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(134 self.G2frame,self.G2frame.Image, 'Image Controls')))126 G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId( 127 G2frame,G2frame.Image, 'Image Controls'))) 135 128 self.ImageControls['showLines'] = True 136 129 self.ImageControls['ring'] = [] … … 143 136 # load copy of Image Masks, keep thresholds 144 137 self.ImageMasks = copy.deepcopy( 145 self.G2frame.PatternTree.GetItemPyData(146 G2gd.GetPatternTreeItemId( self.G2frame,self.G2frame.Image, 'Masks')))138 G2frame.PatternTree.GetItemPyData( 139 G2gd.GetPatternTreeItemId(G2frame,G2frame.Image, 'Masks'))) 147 140 self.Thresholds = self.ImageMasks['Thresholds'][:] 148 141 # make sure all output directories exist … … 155 148 if not os.path.exists(self.params['outdir']): 156 149 os.makedirs(self.params['outdir']) 157 if self.Reset: # after Reset has been pressed, delete all PWDR items 158 # created after last Start was pressed 159 G2frame = self.G2frame 150 if self.Reset: # special things to do after Reset has been pressed 151 # reset controls and masks for all IMG items in tree to master 152 for img in G2gd.GetPatternTreeDataNames(G2frame,['IMG ']): 153 # update controls from master 154 controlsDict = G2frame.PatternTree.GetItemPyData( 155 G2gd.GetPatternTreeItemId(G2frame,G2frame.Image, 'Image Controls')) 156 controlsDict.update(self.ImageControls) 157 # update masks from master 158 ImageMasks = G2frame.PatternTree.GetItemPyData( 159 G2gd.GetPatternTreeItemId(G2frame,G2frame.Image, 'Masks')) 160 ImageMasks.update(self.ImageMasks) 161 # delete all PWDR items created after last Start was pressed 160 162 idlist = [] 161 163 item, cookie = G2frame.PatternTree.GetFirstChild(G2frame.root) 162 164 while item: 163 165 itemName = G2frame.PatternTree.GetItemText(item) 164 if itemName in self.G2frame.AutointPWDRnames:166 if itemName in G2frame.AutointPWDRnames: 165 167 idlist.append(item) 166 168 item, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie) 167 169 for item in idlist: 168 170 G2frame.PatternTree.Delete(item) 169 self.Reset = False170 self.G2frame.AutointPWDRnames = [] # list of created PWDR tree item names171 self.Reset = False 172 G2frame.AutointPWDRnames = [] # list of created PWDR tree item names 171 173 172 174 def __init__(self,G2frame,PollTime=60.0): … … 306 308 307 309 controlsId = G2frame.PatternTree.GetSelection() 308 size,imagefile = G2frame.PatternTree.GetItemPyData(G2frame.Image)310 size,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(G2frame.Image) 309 311 self.imagedir,fileroot = os.path.split(imagefile) 310 312 self.params['filter'] = '*'+os.path.splitext(fileroot)[1] -
trunk/imports/G2img_1TIF.py
r2044 r2065 69 69 return True 70 70 71 def GetTifData(filename ,imageOnly=False):71 def GetTifData(filename): 72 72 '''Read an image in a pseudo-tif format, 73 73 as produced by a wide variety of software, almost always … … 135 135 Npix = nx*ny 136 136 if 34710 in IFD: 137 if not imageOnly: 138 print 'Read MAR CCD tiff file: ',filename 137 print 'Read MAR CCD tiff file: ',filename 139 138 marFrame = rmf.marFrame(File,byteOrd,IFD) 140 139 image = np.flipud(np.array(np.asarray(marFrame.image),dtype=np.int32)) … … 180 179 pixy = [172,172] 181 180 File.seek(4096) 182 if not imageOnly: 183 print 'Read Pilatus tiff file: ',filename 181 print 'Read Pilatus tiff file: ',filename 184 182 image = ar.array('L',File.read(4*Npix)) 185 183 image = np.array(np.asarray(image),dtype=np.int32) … … 189 187 pixy = [200,200] 190 188 File.seek(8) 191 if not imageOnly: 192 print 'Read GE-detector tiff file: ',filename 189 print 'Read GE-detector tiff file: ',filename 193 190 image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 194 191 elif IFD[258][2][0] == 32: … … 196 193 pixy = [200,200] 197 194 File.seek(8) 198 if not imageOnly: 199 print 'Read CHESS-detector tiff file: ',filename 195 print 'Read CHESS-detector tiff file: ',filename 200 196 image = np.array(ar.array('L',File.read(4*Npix)),dtype=np.int32) 201 197 elif 270 in IFD: … … 207 203 pixy = [200,200]*IFD[277][2][0] 208 204 File.seek(IFD[273][2][0]) 209 if not imageOnly: 210 print 'Read ImageJ tiff file: ',filename 205 print 'Read ImageJ tiff file: ',filename 211 206 image = ar.array('H',File.read(2*Npix)) 212 207 if '>' in byteOrd: … … 217 212 pixy = [158,158] 218 213 File.seek(512) 219 if not imageOnly: 220 print 'Read DND SAX/WAX-detector tiff file: ',filename 214 print 'Read DND SAX/WAX-detector tiff file: ',filename 221 215 image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 222 216 elif sizexy == [1536,1536]: … … 224 218 pixy = [150,150] 225 219 File.seek(64) 226 if not imageOnly: 227 print 'Read Gold tiff file:',filename 220 print 'Read Gold tiff file:',filename 228 221 image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 229 222 elif sizexy == [2048,2048] or sizexy == [1024,1024] or sizexy == [3072,3072]: … … 233 226 pixy = [200,200] 234 227 File.seek(8) 235 if not imageOnly: 236 print 'Read APS PE-detector tiff file: ',filename 228 print 'Read APS PE-detector tiff file: ',filename 237 229 if dataType == 5: 238 230 image = np.array(ar.array('f',File.read(4*Npix)),dtype=np.float32) … … 243 235 pixy = [46.9,46.9] 244 236 File.seek(8) 245 if not imageOnly: 246 print 'Read MedOptics D1 tiff file: ',filename 237 print 'Read MedOptics D1 tiff file: ',filename 247 238 image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 248 239 … … 255 246 tifType = 'MAR325' 256 247 File.seek(4096) 257 if not imageOnly: 258 print 'Read MAR CCD tiff file: ',filename 248 print 'Read MAR CCD tiff file: ',filename 259 249 image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 260 250 elif IFD[273][2][0] == 512: … … 262 252 pixy = [200,200] 263 253 File.seek(512) 264 if not imageOnly: 265 print 'Read 11-ID-C tiff file: ',filename 254 print 'Read 11-ID-C tiff file: ',filename 266 255 image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 267 256 … … 272 261 pixy = [9,9] 273 262 File.seek(8) 274 if not imageOnly: 275 print 'Read APS scanCCD tiff file: ',filename 263 print 'Read APS scanCCD tiff file: ',filename 276 264 image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 277 265 elif IFD[273][2][0] == 4096: … … 279 267 pixy = [73.242,73.242] 280 268 File.seek(4096) 281 if not imageOnly: 282 print 'Read Rayonix MX300HE tiff file: ',filename 269 print 'Read Rayonix MX300HE tiff file: ',filename 283 270 image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 284 271 # elif sizexy == [960,960]: … … 304 291 data = {'pixelSize':pixy,'wavelength':wavelength,'distance':distance,'center':center,'size':sizexy} 305 292 File.close() 306 if imageOnly: 307 return image 308 else: 309 return head,data,Npix,image 293 return head,data,Npix,image -
trunk/imports/G2img_GE.py
r2015 r2065 17 17 import sys 18 18 import os 19 import numpy as np 19 20 import GSASIIIO as G2IO 20 21 import GSASIIpath … … 34 35 return True 35 36 36 def Reader(self,filename,filepointer, ParentFrame=None, ** unused):37 '''Read using Bob's routine37 def Reader(self,filename,filepointer, ParentFrame=None, **kwarg): 38 '''Read using GE file reader 38 39 ''' 39 self.Comments,self.Data,self.Npix,self.Image = G2IO.GetGEsumData(filename) 40 #rdbuffer = kwarg.get('buffer') 41 imagenum = kwarg.get('blocknum') 42 if imagenum is None: imagenum = 1 43 self.Comments,self.Data,self.Npix,self.Image,more = GetGEsumData(filename,imagenum=imagenum) 40 44 if self.Npix == 0 or not self.Comments: 41 45 return False 42 self.LoadImage(ParentFrame,filename) 46 self.LoadImage(ParentFrame,filename,imagenum) 47 self.repeat = more 43 48 return True 49 50 def GetGEsumData(filename,imagenum=1): 51 '''Read G.E. detector images from various files as produced at 1-ID and 52 with Detector Pool detector. 53 ''' 54 import struct as st 55 import array as ar 56 more = False 57 File = open(filename,'rb') 58 if '.sum' in filename or '.cor' in filename: 59 head = ['GE detector sum or cor data from APS 1-ID',] 60 sizexy = [2048,2048] 61 Npix = sizexy[0]*sizexy[1] 62 image = np.array(ar.array('f',File.read(4*Npix)),dtype=np.int32) 63 elif '.avg' in filename: 64 head = ['GE detector avg or ge* data from APS 1-ID',] 65 sizexy = [2048,2048] 66 Npix = sizexy[0]*sizexy[1] 67 image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 68 else: 69 head = ['GE detector raw data',] 70 File.seek(18) 71 size,nframes = st.unpack('<ih',File.read(6)) 72 # number of frames seems to be 3 for single-image files 73 if size != 2048: 74 print('Warning GE image size unexpected: '+str(size)) 75 return 0,0,0,0,False # probably should quit now 76 if imagenum > nframes: 77 print('Error: attempt to read image #'+str(imagenum)+ 78 ' from file with '+str(nframes)+' images.') 79 return 0,0,0,0,False 80 elif imagenum < nframes: 81 more = True 82 sizexy = [2048,2048] 83 Npix = sizexy[0]*sizexy[1] 84 pos = 8192 + (imagenum-1)*2*Npix 85 File.seek(pos) 86 image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 87 if len(image) != sizexy[1]*sizexy[0]: 88 print('not enough images while reading GE file: '+filename+'image #'+str(imagenum)) 89 return 0,0,0,0,False 90 head += ['file: '+filename+' image #'+str(imagenum),] 91 #while nframes > 1: 92 # print 'adding' 93 # image += np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32) 94 # nframes -= 1 95 image = np.reshape(image,(sizexy[1],sizexy[0])) 96 data = {'pixelSize':[200,200],'wavelength':0.15,'distance':250.0,'center':[204.8,204.8],'size':sizexy} 97 data['ImageTag'] = imagenum 98 File.close() 99 if GSASIIpath.GetConfigValue('debug'): 100 print 'Read GE file: '+filename+' image #'+str(imagenum) 101 return head,data,Npix,image,more -
trunk/imports/G2img_SumG2.py
r2015 r2065 18 18 import sys 19 19 import os 20 import cPickle 20 21 import GSASIIIO as G2IO 21 22 import GSASIIpath … … 40 41 import scipy.misc 41 42 Fp = open(filename,'rb') 42 self.Comments,self.Data,self.Npix,self. image = cPickle.load(Fp)43 self.Comments,self.Data,self.Npix,self.Image = cPickle.load(Fp) 43 44 Fp.close() 44 45 self.LoadImage(ParentFrame,filename) 45 46 return True 46 # N.B. This replaces G2IO.GetG2Image
Note: See TracChangeset
for help on using the changeset viewer.