def getStack(self, filelist=None, imagestack=None): if filelist in [None, []]: filelist, filefilter = self._getStackOfFiles(getfilter=True) else: filefilter = "" if not len(filelist): return None if filefilter in ["", "All Files (*)"]: if HDF5: if h5py.is_hdf5(filelist[0]): filefilter = "HDF5" fileindex = 0 begin = None end = None aifirafile = False if len(filelist): PyMcaDirs.inputDir = os.path.dirname(filelist[0]) #if we are dealing with HDF5, no more tests needed if not filefilter.upper().startswith('HDF5'): f = open(filelist[0], 'rb') #read 10 characters if sys.version < '3.0': line = f.read(10) else: try: line = str(f.read(10).decode()) except UnicodeDecodeError: #give a dummy value line = " " f.close() omnicfile = False if filefilter.upper().startswith('HDF5'): stack = QHDF5Stack1D.QHDF5Stack1D(filelist) omnicfile = True elif filefilter.upper().startswith('OPUS-DPT'): stack = OpusDPTMap.OpusDPTMap(filelist[0]) omnicfile = True elif filefilter.upper().startswith("AIFIRA"): stack = AifiraMap.AifiraMap(filelist[0]) omnicfile = True aifirafile = True elif filefilter.upper().startswith("SUPAVISIO"): stack = SupaVisioMap.SupaVisioMap(filelist[0]) omnicfile = True elif filefilter.upper().startswith("TEXTIMAGE"): imagestack = True fileindex = 0 stack = TextImageStack.TextImageStack(imagestack=True) elif filefilter.upper().startswith("IMAGE") and\ (filelist[0].upper().endswith("TIF") or\ filelist[0].upper().endswith("TIFF")): stack = TiffStack.TiffStack(imagestack=True) elif filefilter.upper().startswith("RENISHAW"): stack = RenishawMap.RenishawMap(filelist[0]) omnicfile = True elif filefilter == "" and\ (filelist[0].upper().endswith("TIF") or\ filelist[0].upper().endswith("TIFF")): stack = TiffStack.TiffStack(imagestack=True) elif filefilter.upper().startswith("IMAGE"): if imagestack is None: imagestack = True fileindex = 0 stack = QStack(imagestack=imagestack) elif line[0] == "{": if filelist[0].upper().endswith("RAW"): if imagestack is None: imagestack = True stack = QStack(imagestack=imagestack) elif line[0:2] in ["II", "MM"]: if imagestack is None: imagestack = True stack = QStack(imagestack=imagestack) elif line.startswith('Spectral'): stack = OmnicMap.OmnicMap(filelist[0]) omnicfile = True elif line.startswith('#\tDate'): stack = LuciaMap.LuciaMap(filelist[0]) omnicfile = True elif filelist[0].upper().endswith("RAW.GZ")or\ filelist[0].upper().endswith("EDF.GZ")or\ filelist[0].upper().endswith("CCD.GZ")or\ filelist[0].upper().endswith("RAW.BZ2")or\ filelist[0].upper().endswith("EDF.BZ2")or\ filelist[0].upper().endswith("CCD.BZ2")or\ filelist[0].upper().endswith(".CBF"): if imagestack is None: imagestack = True stack = QStack(imagestack=imagestack) elif filelist[0].upper().endswith(".RTX"): stack = RTXMap.RTXMap(filelist[0]) omnicfile = True elif filelist[0][-4:].upper() in ["PIGE", "PIGE"]: stack = SupaVisioMap.SupaVisioMap(filelist[0]) omnicfile = True elif filelist[0][-3:].upper() in ["RBS"]: stack = SupaVisioMap.SupaVisioMap(filelist[0]) omnicfile = True elif filelist[0][-3:].upper() in ["SPE"] and\ (line[0] not in ['$', '#']): #Roper Scientific format #handle it as MarCCD stack stack = QStack(imagestack=True) elif MRCMap.isMRCFile(filelist[0]): stack = MRCMap.MRCMap(filelist[0]) omnicfile = True imagestack = True elif LispixMap.isLispixMapFile(filelist[0]): stack = LispixMap.LispixMap(filelist[0]) omnicfile = True elif RenishawMap.isRenishawMapFile(filelist[0]): # This is dangerous. Any .txt file with four # columns would be accepted as a Renishaw Map # by other hand, I do not know how to handle # that case as a stack. stack = RenishawMap.RenishawMap(filelist[0]) omnicfile = True else: stack = QSpecFileStack() if len(filelist) == 1: if not omnicfile: try: stack.loadIndexedStack(filelist[0], begin, end, fileindex=fileindex) except: msg = qt.QMessageBox() msg.setIcon(qt.QMessageBox.Critical) msg.setText("%s" % sys.exc_info()[1]) if QTVERSION < '4.0.0': msg.exec_loop() else: msg.exec_() if DEBUG: raise elif len(filelist): if not omnicfile: try: stack.loadFileList(filelist, fileindex=fileindex) except: msg = qt.QMessageBox() msg.setIcon(qt.QMessageBox.Critical) msg.setText("%s" % sys.exc_info()[1]) if QTVERSION < '4.0.0': msg.exec_loop() else: msg.exec_() if DEBUG: raise if aifirafile: masterStack = DataObject.DataObject() masterStack.info = copy.deepcopy(stack.info) masterStack.data = stack.data[:, :, 0:1024] masterStack.info['Dim_2'] = int(masterStack.info['Dim_2'] / 2) slaveStack = DataObject.DataObject() slaveStack.info = copy.deepcopy(stack.info) slaveStack.data = stack.data[:, :, 1024:] slaveStack.info['Dim_2'] = int(slaveStack.info['Dim_2'] / 2) return [masterStack, slaveStack] else: return stack
def getStackFromPattern(self, filepattern, begin, end, increment=None, imagestack=None, fileindex=0): #get the first filename filename = filepattern % tuple(begin) if not os.path.exists(filename): raise IOError("Filename %s does not exist." % filename) #get the file list args = self.getFileListFromPattern(filepattern, begin, end, increment=increment) #get the file type f = open(args[0], 'rb') #read 10 characters line = f.read(10) f.close() specfile = False marCCD = False if line.startswith("II") or line.startswith("MM"): marCCD = True if line[0] == "\n": line = line[1:] if (line[0] == "{") or marCCD: if imagestack is None: if marCCD: imagestack = True if imagestack: #prevent any modification fileindex = 0 if filepattern is not None: #this dows not seem to put any trouble #(because of no redimensioning attempt) if False and (len(begin) != 1): raise IOError("EDF stack redimensioning not supported yet") stack = QStack(imagestack=imagestack) elif line.startswith('Spectral'): stack = OmnicMap.OmnicMap(args[0]) elif line.startswith('#\tDate:'): stack = LuciaMap.LuciaMap(args[0]) elif args[0][-4:].upper() in ["PIGE", "PIXE"]: stack = SupaVisioMap.SupaVisioMap(args[0]) elif args[0][-3:].upper() in ["RBS"]: stack = SupaVisioMap.SupaVisioMap(args[0]) elif args[0][-3:].lower() in [".h5", "nxs", "hdf"]: if not HDF5: raise IOError(\ "No HDF5 support while trying to read an HDF5 file") stack = QHDF5Stack1D.QHDF5Stack1D(args) elif args[0].upper().endswith("RAW.GZ")or\ args[0].upper().endswith("EDF.GZ")or\ args[0].upper().endswith("CCD.GZ")or\ args[0].upper().endswith("RAW.BZ2")or\ args[0].upper().endswith("EDF.BZ2")or\ args[0].upper().endswith("CCD.BZ2"): if imagestack is None: imagestack = True stack = QStack(imagestack=imagestack) else: if HDF5: if h5py.is_hdf5(args[0]): stack = QHDF5Stack1D.QHDF5Stack1D(args) else: stack = QSpecFileStack() specfile = True else: stack = QSpecFileStack() specfile = True if specfile and (len(begin) == 2): if increment is None: increment = [1] * len(begin) shape = (len(range(begin[0], end[0] + 1, increment[0])), len(range(begin[1], end[1] + 1, increment[1]))) stack.loadFileList(args, fileindex=fileindex, shape=shape) else: stack.loadFileList(args, fileindex=fileindex) return stack