예제 #1
0
def test_is_Bluesky_specfile():

    folder = join("polartools", "tests", "data_for_test")

    # Tests with spec loading within polartools.
    result = load_data.is_Bluesky_specfile("pressure_calibration.dat",
                                           folder=folder)
    assert result is False

    result = load_data.is_Bluesky_specfile("bluesky_spec.dat", folder=folder)
    assert result is True

    result = load_data.is_Bluesky_specfile("absorption.dat", folder=folder)
    assert result is False

    # Tests loading the spec file here.
    spec_file = SpecDataFile(join(folder, "pressure_calibration.dat"))
    result = load_data.is_Bluesky_specfile(spec_file)
    assert result is False

    spec_file = SpecDataFile(join(folder, "bluesky_spec.dat"))
    result = load_data.is_Bluesky_specfile(spec_file)
    assert result is True

    spec_file = SpecDataFile(join(folder, "absorption.dat"))
    result = load_data.is_Bluesky_specfile(spec_file)
    assert result is False
예제 #2
0
 def setUp(self):
     self.specDisplay = SpecDisplay()
     self.dataPath = os.environ.get(DATAPATH)
     specFileName1 = os.path.join(self.dataPath, FLUORESCENCE_FILE)
     try:
         self.specFile1 = SpecDataFile(specFileName1)
     except Exception as ex:
         self.fail(ex)
     specFileName2 = os.path.join(self.dataPath, FLUORESCENCE_FILE)
     try:
         self.specFile2 = SpecDataFile(specFileName2)
     except Exception as ex:
         self.fail(ex)
예제 #3
0
    def load_spec_file(self):

        if self.spec_fname == '':
            self.status.showMessage('No file was loaded')
            return

        self.scan.scans_box.clear()
        try:
            self._spec_file = SpecDataFile(self.spec_fname)

            self._commands_list = self._spec_file.getScanCommands()
            for i in range(len(self._commands_list)):
                if '#S' in self._commands_list[i]:
                    self._commands_list[i] = self._commands_list[i].strip(
                        '#S ')
                self.scan.scans_box.addItem(self._commands_list[i])

            self.scan.scans_box.setCurrentIndex(len(self._commands_list) - 1)

            self.selected_scan(self._commands_list[-1])
            self.make_plot()
            self.pressure.print_pressure.setText('')
        except:
            self.status.showMessage('{} is not a spec file!!'.format(
                self.spec.fname.text()))
예제 #4
0
 def testScanSelected(self):
     selectedScan = 5
     specFile = os.path.join(self.dataPath, FLUORESCENCE_FILE)
     spyLoaded = QSignalSpy(self.scanBrowser.scanLoaded)
     specData = SpecDataFile(specFile)
     self.scanBrowser.loadScans(specData.scans)
     self.assertEqual(len(spyLoaded), 1)
     self.assertEqual(len(self.spySelected), 0)
     self.scanBrowser.setCurrentScan(selectedScan)
     self.assertEqual(len(spyLoaded), 1)
     self.assertEqual(len(self.spySelected), 1)
     self.assertEqual(self.scanBrowser.getCurrentScan(), '6')
     self.scanBrowser.filterByScanTypes(specData.scans, SCAN_TYPES[2])
     self.assertEqual(len(spyLoaded), 2)
     self.assertEqual(len(self.spySelected), 1)
     # Doesn't register a selection change since row has not changed
     self.scanBrowser.setCurrentScan(selectedScan)
     self.assertEqual(len(spyLoaded), 2)
     self.assertEqual(len(self.spySelected), 1)
     self.assertEqual(self.scanBrowser.getCurrentScan(), '12')
     # Register a selection change since row changed
     self.scanBrowser.setCurrentScan(selectedScan + 1)
     self.assertEqual(len(spyLoaded), 2)
     self.assertEqual(len(self.spySelected), 2)
     self.assertEqual(self.scanBrowser.getCurrentScan(), '13')
예제 #5
0
def test_xrd_calibrate_pressure():
    path = join('polartools', 'tests', 'data_for_test')

    # Au calibrant
    pressure = xrd_calibrate_pressure(419,
                                      'pressure_calibration.dat',
                                      temperature=9,
                                      energy=12.0,
                                      positioner='4C Two Theta',
                                      detector='CyberMag',
                                      monitor='IC3',
                                      folder=path)

    assert allclose(pressure, 0.743387, atol=1e-5)

    # Ag calibrant
    spec_file = SpecDataFile(join(path, 'pressure_calibration.dat'))
    pressure = xrd_calibrate_pressure(419,
                                      spec_file,
                                      temperature=9,
                                      energy=12.0,
                                      calibrant='Ag',
                                      positioner='4C Two Theta',
                                      detector='CyberMag',
                                      monitor='IC3')

    assert allclose(pressure, 0.818770, atol=1e-5)
예제 #6
0
def load_spec(scan_id, spec_file, folder=""):
    """
    Load data from spec file.

    If `spec_file` is the file name, it will load the spec file internally
    which is time consuming.

    Parameters
    ----------
    scan_id : int
        Scan_id of the scan to be retrieved.
    spec_file : string or spec2nexus.spec.SpecDataFile
        Either the spec file name or a SpecDataFile instance.
    folder : string, optional
        Folder where spec file is located.

    Returns
    -------
    data : pandas.DataFrame
        Table with the data from scan.

    See also
    --------
    :func:`spec2nexus.spec.SpecDataFile`
    """

    if isinstance(spec_file, str):
        path = join(folder, spec_file)
        spec_file = SpecDataFile(path)

    return DataFrame(spec_file.getScan(scan_id).data)
예제 #7
0
def is_Bluesky_specfile(source, folder=""):
    """
    Check if the specfile was created by Bluesky.

    It looks for a "Bluesky" comment in the file header.

    Parameters
    ----------
    source : string or spec2nexus.spec.SpecDataFile
        Either the spec file name or a SpecDataFile instance.
    folder : string, optional
        Folder where spec file is located.

    Returns
    -------
    y : bool
        True if spec_file was generated by Bluesky, False otherwise.

    See also
    --------
    :func:`spec2nexus.spec.SpecDataFile`
    """
    if isinstance(source, str):
        path = join(folder, source)
        source = SpecDataFile(path)

    if len(source.headers[0].comments):
        return source.headers[0].comments[0].startswith("Bluesky")
    else:
        return False
예제 #8
0
 def openFile(self):
     '''
     Open a file, populate the navigator window as appropriate
     '''
     logger.debug(METHOD_ENTER_STR)
     fOptions = qtWidgets.QFileDialog.Options()
     fOptions |= qtWidgets.QFileDialog.DontUseNativeDialog
     fileName = qtWidgets.QFileDialog.getOpenFileName(
         self,
         caption="Open Spec File",
         directory=self.currentDirectory,
         options=fOptions)[0]
     specFile = None
     if fileName != "":
         try:
             specFile = SpecDataFile(fileName)
         except NotASpecDataFile as ex:
             qtWidgets.QMessageBox.warning(
                 self, "Not a Spec File",
                 "The file %s does not seem to be a spec file" % fileName)
             return
         self.currentDirectory = str(os.path.realpath(fileName))
     else:
         return
     self._dataNavigator.addSpecDataFileNode(specFile)
 def setUp(self):
     self.selection = IntermediateDataSelection()
     print(dir (self.selection))
     self.dataPath = os.environ.get(DATAPATH)
     specDataFileName = os.path.join(self.dataPath, FLUORESCENCE_FILE)
     specDataFile = SpecDataFile(specDataFileName)
     specNode = SpecFileDataNode(specDataFile)
예제 #10
0
    def __init__(self, specPath):
        super(SpecFile, self).__init__(parent=None)
        self.specFilePath = specPath
        self.specFile = SpecDataFile(specPath)
        self.scanBrowser = ScanBrowser()
        self.scanBrowser.loadScans(self.getScans(), self)

        self.selectedScans = []
예제 #11
0
 def __init__(self, specfile):
     if os.path.exists(specfile):
         from spec2nexus.spec import SpecDataFile
         self.filename = specfile
         stat = os.stat(specfile)
         self.size = stat.st_size
         self.mtime = stat.st_mtime
         self.sdf_object = SpecDataFile(specfile)
예제 #12
0
 def specFileInfo(self):
     """This method sets the name, status tip for the spec file, and loads the scan to the list
     from the spec file.
     """
     self.rdOnlyFileName.setText(self.readSpec.specFileName)
     self.rdOnlyFileName.setStatusTip(self.readSpec.specFileName)
     specFile = SpecDataFile(self.readSpec.specFileName)
     self.readSpec.loadScans(specFile.scans)
예제 #13
0
 def openFile(self):
     fileName = qtWidgets.QFileDialog.getOpenFileName(
         None, "Open Spec File")[0]
     self.specFile = SpecDataFile(fileName)
     self.setWindowTitle(APP_NAME + ' - ' + str(fileName))
     firstScan = self.specFile.getFirstScanNumber()
     self.positionerSelector.loadPositioners(
         self.specFile.scans[firstScan].positioner)
예제 #14
0
    def test_contents(self):
        spec_data = SpecDataFile(self.fname)
        self.assertTrue(isinstance(spec_data, SpecDataFile))
        out = writer.Writer(spec_data)
        scan_list = [
            1,
        ]
        out.save(self.hname, scan_list)

        # text that UXML group defined as expected
        self.assertTrue(os.path.exists(self.hname))
        with h5py.File(self.hname) as h5_file:
            self.assertTrue("S1" in h5_file)
            nxentry = h5_file["/S1"]
            self.assertTrue("UXML" in nxentry)
            uxml = nxentry["UXML"]
            self.assertTrue("NX_class" in uxml.attrs)
            self.assertEqual(uxml.attrs["NX_class"], "NXnote")

            # spot-check a couple items
            # group: attenuator_set
            self.assertTrue("attenuator_set" in uxml)
            group = uxml["attenuator_set"]
            prefix = group.attrs.get("prefix")
            description = group.attrs.get("description")
            unique_id = group.attrs.get("unique_id")
            self.assertEqual(prefix, "33idd:filter:")
            self.assertEqual(description, "33-ID-D Filters")
            self.assertEqual(unique_id, None)

            # <dataset name="corrdet_counter">corrdet</dataset>
            self.assertTrue("corrdet_counter" in group)
            ds = group["corrdet_counter"]
            # http://docs.h5py.org/en/stable/whatsnew/2.1.html?highlight=dataset#dataset-value-property-is-now-deprecated
            value = ds[()]  # ds.value deprecated in h5py
            self.assertEqual(value, [b"corrdet"])

            # <dataset name="wait_time" type="float" units="s">0.500</dataset>
            self.assertTrue("wait_time" in group)
            ds = group["wait_time"]
            attrs = dict(ds.attrs)
            self.assertEqual(ds.attrs.get("units"), "s")
            value = ds[()]  # ds.value deprecated in h5py
            self.assertEqual(value, numpy.array([.5]))

            # <hardlink name="attenuator1" target_id="33idd:filter:Fi1:"/>
            self.assertTrue("attenuator1" in group)
            attenuator1 = group["attenuator1"]
            target = attenuator1.attrs.get("target")
            self.assertNotEqual(target, attenuator1.name)
            self.assertEqual(target, uxml["attenuator1"].name)

            addr = "/S1/UXML/ad_file_info/file_format"
            self.assertTrue(addr in h5_file)
            ds = h5_file[addr]
            value = ds[()]  # ds.value deprecated in h5py
            self.assertEqual(value, [b"TIFF"])
예제 #15
0
 def testLoadScans(self):
     specFile = os.path.join(self.dataPath, FLUORESCENCE_FILE)
     print("SpecDataFile %s" % specFile)
     specData = SpecDataFile(specFile)
     self.scanBrowser.loadScans(specData.scans, newFile=True)
     self.assertEqual(len(self.spyLoaded), 1)
     self.assertEqual(len(self.spySelected), 0)
     self.assertEqual(self.scanBrowser.scanList.rowCount(),
                      len(specData.getScanNumbers()))
예제 #16
0
 def testName(self):
     spec_data = SpecDataFile(self.fname)
     self.assertTrue(isinstance(spec_data, SpecDataFile))
     out = writer.Writer(spec_data)
     scan_list = [
         1,
     ]
     out.save(self.hname, scan_list)
     # TODO: make tests of other things in the Writer
     dd = out.root_attributes()
     self.assertTrue(isinstance(dd, dict))
예제 #17
0
    def testName(self):
        spec_data = SpecDataFile(self.fname)
        self.assertTrue(isinstance(spec_data, SpecDataFile))
        scan = spec_data.getScan(1)

        with self.assertRaises(spec2nexus.plugins.uxml.UXML_Error) as context:
            scan.interpret()
        received = str(context.exception)
        expected = "UXML error: Element 'group': "
        expected += "Character content other than whitespace is not allowed "
        expected += "because the content type is 'element-only'."
        self.assertTrue(received.startswith(expected))
예제 #18
0
 def choose_file(self):
     """Opens file dialog, set file text box to the chosen path."""
     from spec2nexus.spec import SpecDataFile
     dirname = self.get_default_directory(self.filename.text())
     filename = getOpenFileName(self, 'Open file', dirname)
     if os.path.exists(filename):
         self.filename.setText(str(filename))
         self.spec = SpecDataFile(self.get_filename())
         self.set_default_directory(os.path.dirname(filename))
         all_scans = self.get_scan_numbers()
         scan_min = all_scans[0]
         self.scanmin.setText(str(scan_min))
         scan_max = all_scans[-1]
         self.scanmax.setText(str(scan_max))
예제 #19
0
    def choose_file(self):
        '''
        Opens file dialog, set file text box to the chosen path
        '''
        from spec2nexus.spec import SpecDataFile

        dirname = self.get_default_directory(self.filename.text())
        filename = getOpenFileName(self, 'Open file', dirname)
        if os.path.exists(filename):
            self.filename.setText(str(filename))
            self.spec = SpecDataFile(self.get_filename())
            self.set_default_directory(os.path.dirname(filename))
            scan_min = self.spec.getMinScanNumber()
            self.scanmin.setText(str(scan_min))
            scan_max = self.spec.getMaxScanNumber()
            self.scanmax.setText(str(scan_max))
예제 #20
0
 def reload(self):
     logger.debug(METHOD_ENTER_STR)
     scanKeys = sorted(self._specDataFile.scans, key=int)
     logger.debug("Unload the old data")
     
     filename = self._specDataFile.fileName
     for scan in scanKeys:
         logger.debug("scan to remove %s" % self.scans[scan].__class__)
         self.removeSpecScan(scan)
     for scan in self._specDataFile.scans:
         scan = None
     self._specDataFile = None
     gc.collect
     logger.debug("Load current data in the file")
     self._specDataFile = SpecDataFile(filename)
     self.loadScans()
     gc.collect()
예제 #21
0
    def _browseForPathToReplace(self):
        if os.path.exists(str(self.projNameTxt.text())) and \
                          (str(self.scanNumsTxt.text()) != ""):
            specFile = str(self.projNameTxt.text())
            scans = self.getScanList()
            sd = SpecDataFile(specFile)
            scan = sd.scans[str(scans[0])]
            scan.interpret()
            if scan.CCD != None:
                try:
                    filePath = scan.CCD['image_dir'][0]
                    self.pathToReplaceTxt.setText(filePath)
                except:
                    qtWidgets.QMessageBox.warning(self, "File patgh not Found", \
                                              "File path not found for scan %s" \
                                              % scan)

            self.pathToReplaceTxt.editingFinished.emit()
예제 #22
0
 def testFilterByScanTypes(self):
     specFile = os.path.join(self.dataPath, FLUORESCENCE_FILE)
     spyLoaded = QSignalSpy(self.scanBrowser.scanLoaded)
     specData = SpecDataFile(specFile)
     self.scanBrowser.loadScans(specData.scans)
     self.assertEqual(len(spyLoaded), 1)
     self.assertEqual(len(self.spySelected), 0)
     self.scanBrowser.filterByScanTypes(specData.scans, SCAN_TYPES[1])
     self.assertEqual(self.scanBrowser.scanList.rowCount(),
                      NUM_SCAN_TYPES[1])
     self.scanBrowser.filterByScanTypes(specData.scans, SCAN_TYPES[2])
     self.assertEqual(self.scanBrowser.scanList.rowCount(),
                      NUM_SCAN_TYPES[2])
     self.scanBrowser.filterByScanTypes(specData.scans, SCAN_TYPES[3])
     self.assertEqual(self.scanBrowser.scanList.rowCount(),
                      NUM_SCAN_TYPES[3])
     self.scanBrowser.filterByScanTypes(specData.scans, SCAN_TYPES[4])
     self.assertEqual(self.scanBrowser.scanList.rowCount(),
                      NUM_SCAN_TYPES[4])
     self.scanBrowser.filterByScanTypes(specData.scans, SCAN_TYPES[5])
     self.assertEqual(self.scanBrowser.scanList.rowCount(),
                      NUM_SCAN_TYPES[5])
     self.scanBrowser.filterByScanTypes(specData.scans, SCAN_TYPES[6])
     self.assertEqual(self.scanBrowser.scanList.rowCount(),
                      NUM_SCAN_TYPES[6])
     self.scanBrowser.filterByScanTypes(specData.scans, SCAN_TYPES[7])
     self.assertEqual(self.scanBrowser.scanList.rowCount(),
                      NUM_SCAN_TYPES[7])
     self.scanBrowser.filterByScanTypes(specData.scans, SCAN_TYPES[8])
     self.assertEqual(self.scanBrowser.scanList.rowCount(),
                      NUM_SCAN_TYPES[8])
     self.scanBrowser.filterByScanTypes(specData.scans, SCAN_TYPES[1:])
     self.assertEqual(self.scanBrowser.scanList.rowCount(),
                      NUM_SCAN_TYPES[0])
     self.scanBrowser.filterByScanTypes(specData.scans, [])
     self.assertEqual(self.scanBrowser.scanList.rowCount(),
                      NUM_SCAN_TYPES[0])
     with self.assertRaises(ValueError):
         self.scanBrowser.filterByScanTypes(specData.scans, None)
     self.assertEqual(NUM_SCAN_TYPES[0], sum(NUM_SCAN_TYPES[1:]))
     self.assertEqual(len(spyLoaded), 11)
     self.assertEqual(len(self.spySelected), 0)
예제 #23
0
    def loadSpec(self, specFile, directory):
        """This method loads the spec file and creates the widgets on the control QDockWidget.
        """
        self.chambers = []
        self.specFile = SpecDataFile(specFile)
        self.specHeader = SpecDataFileHeader(specFile)
        self.scans = self.specFile.scans
        self.scan = str(int(os.path.basename(directory)))
        self.specFileOpened = True

        self.maxScans = self.specFile.getMaxScanNumber()

        # Gets possible normalizer values
        for key in self.scans[self.scan].data.keys():
            if key.find("Ion_Ch_") == 0:
                self.chambers.append(key)

        self.chambers.sort()
        self.MonDialog()
        self.mainWindow.controlDockWidget.close()
        self.mainWindow.ControlDockWidget()
예제 #24
0
    def test_contents(self):
        spec_data = SpecDataFile(self.fname)
        self.assertTrue(isinstance(spec_data, SpecDataFile))
        out = writer.Writer(spec_data)
        scan_list = [
            1,
        ]
        out.save(self.hname, scan_list)

        # the ONLY structural difference between test_3.spec
        # and test_4.spec is the presence of this hardlink
        self.assertTrue(os.path.exists(self.hname))
        with h5py.File(self.hname) as h5_file:
            source = h5_file["/S1/UXML/ad_detector/beam_center_x"]
            link = h5_file["/S1/UXML/beam_center_x"]
            target = source.attrs.get("target")

            self.assertNotEqual(source.name, link.name)
            self.assertNotEqual(target, None)
            self.assertEqual(target, source.name)
            self.assertEqual(target, link.attrs.get("target"))
예제 #25
0
    def loadSource(self, mapHKL=False):
        logger.debug(METHOD_ENTER_STR)
        #Load up the instrument config XML file
        self.loadInstrumentXMLConfig()
        #Load up the detector configuration file
        self.loadDetectorXMLConfig()
        #         lastScan = None

        self.specFile = os.path.join(self.projectDir, self.projectName + \
                                     self.projectExt)
        try:
            self.sd = SpecDataFile(self.specFile)
            self.mapHKL = mapHKL
            maxScan = int(self.sd.getMaxScanNumber())
            logger.debug("%s scans" % str(maxScan))
            if self.scans is None:
                self.scans = range(1, maxScan + 1)
            imagePath = os.path.join(self.projectDir,
                                     IMAGE_DIR_MERGE_STR % self.projectName)

            self.imageBounds = {}
            self.imageToBeUsed = {}
            self.availableScans = []
            self.incidentEnergy = {}
            self.ubMatrix = {}
            self.scanType = {}
            self.scanDataFile = {}
            self.immDataFileName = {}
            self.progress = 0
            self.progressInc = 1
            self.isCcdScan = {}
            self.dataFilePrefix = {}
            self.containsDark = {}
            self.numberOfDarks = {}
            self.containsRoi = {}
            self.roi = {}
            self.repeatsPoints = {}
            self.numberOfRepeatPoints = {}
            # Zero the progress bar at the beginning.
            if self.progressUpdater is not None:
                self.progressUpdater(self.progress, self.progressMax)
            for scan in self.scans:
                if (self.cancelLoad):
                    self.cancelLoad = False
                    raise LoadCanceledException(CANCEL_STR)

                else:
                    #                     if (os.path.exists(os.path.join(imagePath, \
                    #                                             SCAN_NUMBER_MERGE_STR % scan))):
                    curScan = self.sd.scans[str(scan)]
                    curScan.interpret()
                    logger.debug("scan: %s" % scan)
                    #                     if int(scan) > 1:
                    #                         lastScan = self.sd.scans[str(int(scan)-1)]
                    #                         lastScan.interpret()
                    #                         logger.debug("dir(lastScan) = %s" % dir(lastScan) )
                    #                         logger.debug("lastScan.CCD %s" % lastScan.CCD)
                    try:
                        angles = self.getGeoAngles(curScan, self.angleNames)
                        self.availableScans.append(scan)
                        self.scanType[scan] = \
                            self.sd.scans[str(scan)].scanCmd.split()[0]
                        logger.debug("Scan %s scanType %s" %
                                     (scan, self.scanType[scan]))
                        if self.scanType[scan] == 'xpcsscan':
                            #print dir(self.sd)
                            d = curScan.data
                            h = curScan.header
                            dataFile = curScan.XPCS['batch_name'][0]
                            self.immDataFileName[scan] = dataFile
                            logger.debug("curScan.XPCS %s" % curScan.XPCS)
                            if not (dataFile in self.scanDataFile.keys()):
                                self.scanDataFile[dataFile] = {}
                                numImagesInScan = self.imagesInScan(scan)
                                self.scanDataFile[dataFile][scan] = \
                                    range(0, numImagesInScan)
                                self.scanDataFile[dataFile]['maxIndexImage'] = \
                                    numImagesInScan
                                logger.debug( "scanDataFile for " + \
                                    str(dataFile) + " at scan " + str(scan) + \
                                    " " + str(self.scanDataFile[dataFile][scan]))
                            else:
                                startingImage = \
                                    self.scanDataFile[dataFile]['maxIndexImage']
                                numImagesInScan = self.imagesInScan(scan)
                                self.scanDataFile[dataFile][scan] = \
                                    range(startingImage, \
                                          startingImage + numImagesInScan)
                                self.scanDataFile[dataFile]['maxIndexImage'] = \
                                    startingImage + numImagesInScan
                                logger.debug( "scanDataFile for " + str(dataFile) + \
                                    " at scan " + str(scan) + " " + \
                                    str(self.scanDataFile[dataFile][scan] ))

                            logger.debug("dataFile %s" % dataFile)

                        elif curScan.CCD != None and \
                            'ccdscan' in curScan.CCD.keys():
                            # this is a ccdscan where the defining #CCD lines
                            # were above the #S lines in spec file
                            #TODO
                            d = curScan.data
                            h = curScan.header
                            ccdPart = curScan.CCD
                            COUNTER_ROI_STR = 'counter_roi'
                            REPEAT_POINTS_STR = 'repeats_per_point'

                            self.isCcdScan[scan] = True
                            self.dataFilePrefix[scan] = ccdPart['image_dir'][0]
                            #If the data has moved from the original location
                            # then we need to change the prefixPath
                            if (self.pathToReplace != None) and \
                                (self.replacePathWith !=None):
                                self.dataFilePrefix[scan] = self.dataFilePrefix[scan].\
                                    replace(self.pathToReplace, \
                                            self.replacePathWith)
                            self.containsDark[scan] = DARK_STR in ccdPart.keys(
                            )
                            self.numberOfDarks[scan] = int(
                                ccdPart[DARK_STR][0])
                            self.containsRoi[
                                scan] = COUNTER_ROI_STR in ccdPart.keys()
                            self.roi[scan] = map(int, ccdPart[COUNTER_ROI_STR])
                            self.repeatsPoints[
                                scan] = REPEAT_POINTS_STR in ccdPart.keys()
                            self.numberOfRepeatPoints[scan] = ccdPart[
                                REPEAT_POINTS_STR]

                            logger.debug("isCcdScan[%s] %s" %
                                         (scan, self.isCcdScan[scan]))
                            logger.debug("dataFilePrefix[%s] %s" %
                                         (scan, self.dataFilePrefix[scan]))
                            if self.containsDark[scan]:
                                logger.debug("containsDark[%s] %s" %
                                             (scan, self.containsDark[scan]))
                            logger.debug("numberOfDarks[%s] %s" %
                                         (scan, self.numberOfDarks[scan]))
                            logger.debug("containsRoi[%s] %s" %
                                         (scan, self.containsRoi[scan]))
                            if self.containsRoi[scan]:
                                self.detectorROI = self.roi[scan]
                                self.detectorROI[0] = self.roi[scan][0]
                                self.detectorROI[
                                    1] = self.roi[scan][0] + self.roi[scan][1]
                                self.detectorROI[2] = self.roi[scan][2]
                                self.detectorROI[
                                    3] = self.roi[scan][2] + self.roi[scan][3]
                                logger.debug("roi[%s] %s" %
                                             (scan, self.roi[scan]))
                            logger.debug("repeatsPoints[%s] %s" %
                                         (scan, self.repeatsPoints[scan]))
                            if self.repeatsPoints[scan]:
                                logger.debug(
                                    "numberOfRepeatPoints[%s] %s" %
                                    (scan, self.numberOfRepeatPoints[scan]))

                        if self.mapHKL == True:
                            self.ubMatrix[scan] = self.getUBMatrix(curScan)
                            if self.ubMatrix[scan] is None:
                                raise Sector33SpecFileException("UB matrix " + \
                                                                "not found.")
                        else:
                            self.ubMatrix[scan] = None
                        self.incidentEnergy[scan] = \
                            12398.4 /float(curScan.G['G4'].split()[3])
                        _start_time = time.time()
                        self.imageBounds[scan] = \
                            self.findImageQs(angles, \
                                             self.ubMatrix[scan], \
                                             self.incidentEnergy[scan])
                        if self.progressUpdater is not None:
                            self.progressUpdater(self.progress,
                                                 self.progressMax)
                        logger.debug (('Elapsed time for Finding qs for scan %d: ' +
                               '%.3f seconds') % \
                               (scan, (time.time() - _start_time)))
                        #Make sure to show 100% completion
                    except ScanDataMissingException:
                        logger.debug("scan %s" % scan)
            if self.progressUpdater is not None:
                self.progressUpdater(self.progressMax, self.progressMax)
        except IOError:
            raise IOError("Cannot open file " + str(self.specFile))
#         if len(self.getAvailableScans()) == 0:
#             raise ScanDataMissingException("Could not find scan data for " + \
#                                            "input file \n" + self.specFile + \
#                                            "\nOne possible reason for this " + \
#                                            "is that the image files are " + \
#                                            "missing.  Images are assumed " + \
#                                            "to be in " + \
#                                            os.path.join(self.projectDir,
#                                         IMAGE_DIR_MERGE_STR % self.projectName))
#Load config information from the imm file
        self.availableScanTypes = set(self.scanType.values())
        logger.debug(METHOD_EXIT_STR)
예제 #26
0
from mpl_toolkits.mplot3d import Axes3D, axes3d
import numpy as np
import matplotlib.pyplot as plt
from spec2nexus.spec import SpecDataFile
from PyQt5.QtWidgets import *
import pylab as plab
from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

# Loading the data.
data = np.loadtxt("C:\\Users\\escal\\Downloads\\PVvalue.259")

# Loading Spec information for scan#: 259
# ========================================
specFile = SpecDataFile("C:\\Users\\escal\\Downloads\\pmnpt_1.spec")
l = specFile.scans["259"].data["L"]

########################################################################################################################
# Plotting the data in 3D

########################################################################################################################
fig1 = plt.figure()
ax = Axes3D(fig1)
ax.set_ylabel("Data")
ax.set_xlabel("Points")
ax.set_zlabel("L")
x = range(0, 64)  # This will have to be replaced by voltage
for i in range(0, 3721):
    z = np.full(64, l[i])
    y = data[i]
    ax.plot(x, y, zs=z)
예제 #27
0
 def openFile(self, filename):
     '''open the SPEC file and get its data'''
     from spec2nexus.spec import SpecDataFile
     if os.path.exists(filename):
         self.SPECfile = SpecDataFile(filename)
예제 #28
0
 def openFile(self):
     fileName = qtWidgets.QFileDialog.getOpenFileName(
         None, "Open Spec File")[0]
     self.specFile = SpecDataFile(fileName)
     self.setWindowTitle(APP_NAME + " - " + str(fileName))
     self.scanBrowser.loadScans(self.specFile.scans)
예제 #29
0
    def loadSource(self, mapHKL=False):
        '''
        This method does the work of loading data from the files.  This has been
        split off from the constructor to allow this to be threaded and later 
        canceled.
        :param mapHKL: boolean to mark if the data should be mapped to HKL
        '''
        # Load up the instrument configuration file
        self.loadInstrumentXMLConfig()
        #Load up the detector configuration file
        self.loadDetectorXMLConfig()

        self.specFile = os.path.join(self.projectDir, self.projectName + \
                                     self.projectExt)
        imageDir = os.path.join(self.projectDir, \
                                IMAGE_DIR_MERGE_STR % self.projectName)
        self.imageFileTmp = os.path.join(imageDir, \
                                TIFF_FILE_MERGE_STR % 
                                (self.projectName))
        # if needed load up the bad pixel file.
        if not (self.badPixelFile is None):
            
            badPixelFile = PilatusBadPixelFile(self.badPixelFile)
            self.badPixels = badPixelFile.getBadPixels()
             
        # id needed load the flat field file
        if not (self.flatFieldFile is None):
            self.flatFieldData = np.array(Image.open(self.flatFieldFile)).T
        # Load scan information from the spec file
        try:
            self.sd = SpecDataFile(self.specFile)
            self.mapHKL = mapHKL
            maxScan = int(self.sd.getMaxScanNumber())
            logger.debug("Number of Scans" +  str(maxScan))
            if self.scans  is None:
                self.scans = range(1, maxScan+1)
            imagePath = os.path.join(self.projectDir, 
                            IMAGE_DIR_MERGE_STR % self.projectName)
            
            self.imageBounds = {}
            self.imageToBeUsed = {}
            self.availableScans = []
            self.incidentEnergy = {}
            self.ubMatrix = {}
            self.scanType = {}
            self.progress = 0
            self.progressInc = 1
            # Zero the progress bar at the beginning.
            if self.progressUpdater is not None:
                self.progressUpdater(self.progress, self.progressMax)
            for scan in self.scans:
                if (self.cancelLoad):
                    self.cancelLoad = False
                    raise LoadCanceledException(CANCEL_STR)
                
                else:
                    if (os.path.exists(os.path.join(imagePath, \
                                            SCAN_NUMBER_MERGE_STR % scan))):
                        try:
                            curScan = self.sd.scans[str(scan)]
                            self.scanType[scan] = \
                                self.sd.scans[str(scan)].scanCmd.split()[0]
                            angles = self.getGeoAngles(curScan, self.angleNames)
                            self.availableScans.append(scan)
                            if self.mapHKL==True:
                                self.ubMatrix[scan] = self.getUBMatrix(curScan)
                                if self.ubMatrix[scan] is None:
                                    raise Sector33SpecFileException("UB matrix " + \
                                                                    "not found.")
                            else:
                                self.ubMatrix[scan] = None
                            self.incidentEnergy[scan] = 12398.4 /float(curScan.G['G4'].split()[3])
                            _start_time = time.time()
                            self.imageBounds[scan] = \
                                self.findImageQs(angles, \
                                                 self.ubMatrix[scan], \
                                                 self.incidentEnergy[scan])
                            if self.progressUpdater is not None:
                                self.progressUpdater(self.progress, self.progressMax)
                            logger.info (('Elapsed time for Finding qs for scan %d: ' +
                                   '%.3f seconds') % \
                                   (scan, (time.time() - _start_time)))
                        except ScanDataMissingException:
                            logger.error( "Scan " + str(scan) + " has no data")
                    #Make sure to show 100% completion
            if self.progressUpdater is not None:
                self.progressUpdater(self.progressMax, self.progressMax)
        except IOError:
            raise IOError( "Cannot open file " + str(self.specFile))
        if len(self.getAvailableScans()) == 0:
            raise ScanDataMissingException("Could not find scan data for " + \
                                           "input file \n" + self.specFile + \
                                           "\nOne possible reason for this " + \
                                           "is that the image files are " + \
                                           "missing.  Images are assumed " + \
                                           "to be in " + \
                                           os.path.join(self.projectDir, 
                                        IMAGE_DIR_MERGE_STR % self.projectName))

        self.availableScanTypes = set(self.scanType.values())
예제 #30
0
 def loadSpecFile(self, fileName):
     self.specFileName = fileName
     self.specFile = SpecDataFile(fileName)
     self.specOpen = True