Example #1
0
 def updateFullFrameImage(self, parameters):
     p = parameters
     if p["imageCategory"] == "ROI":
         p["fullFrame"] = apogee.singleImage(p["filenames"][0], self.maxImageSize)
         x, y = shape(p["fullFrame"])
         p["part"] = array([0, x, 0, y])
     else:
         p["fullFrame"] = apogee.odTriple(p["filenames"], self.maxImageSize, p["partLumCorr"], p["partAtomCount"])
     self.updateADwinID(parameters)
Example #2
0
def analyseShot(shotPath, returnTemplate, image=[], filenames=['li_roi.fit', 'rb_roi.fit'], insituSizeLi=40e-6, insituSizeRb=40e-6):
    """
    returns measurment data of a single shot. Posible values for returnTemplate:
        * ID:            ADwin ID
        * ADwin varname: ADwin code value
        * N_Li/N_Rb:     atomnumber Li/Rb
        * e.g. fwhmH_Li: cloud width h/v
        * T_Li/T_Rb:     temperature
        * etc...
    """
    import os
    import adwin
    import apogee

    if image != []:
        image_Li = image
        image_Rb = image
        adwinFilename = shotPath
    else:
        if 'N_Li' in returnTemplate or 'fwhmH_Li' in returnTemplate or 'fwhmV_Li' in returnTemplate or 'T_Li' in returnTemplate:
            image_Li = apogee.singleImage(os.path.join(shotPath, filenames[0]))
        if 'N_Rb' in returnTemplate or 'fwhmH_Rb' in returnTemplate or 'fwhmV_Rb' in returnTemplate or 'T_Rb' in returnTemplate:
            image_Rb = apogee.singleImage(os.path.join(shotPath, filenames[1]))
        adwinFilename = os.path.join(shotPath, 'adwin_code.acm')

    if 'AmpH_Li' in returnTemplate or 'OffH_Li' in returnTemplate or 'PosH_Li' in returnTemplate or 'fwhmH_Li' in returnTemplate or 'N_Li_Gauss' in returnTemplate or 'T_Li' in returnTemplate:
       gaussfitCoffLiH = gaussfit(image_Li)
    if 'AmpV_Li' in returnTemplate or 'OffV_Li' in returnTemplate or 'PosV_Li' in returnTemplate or 'fwhmV_Li' in returnTemplate or 'N_Li_Gauss' in returnTemplate or 'T_Li' in returnTemplate:
       gaussfitCoffLiV = gaussfit(image_Li, dir = 1)
    if 'AmpH_Rb' in returnTemplate or 'OffH_Rb' in returnTemplate or 'PosH_Rb' in returnTemplate or 'fwhmH_Rb' in returnTemplate or 'N_Rb_Gauss' in returnTemplate or 'T_Rb' in returnTemplate:
       gaussfitCoffRbH = gaussfit(image_Rb)
    if 'AmpV_Rb' in returnTemplate or 'OffV_Rb' in returnTemplate or 'PosV_Rb' in returnTemplate or 'fwhmV_Rb' in returnTemplate or 'N_Rb_Gauss' in returnTemplate or 'T_Rb' in returnTemplate:
       gaussfitCoffRbV = gaussfit(image_Rb, dir = 1)

    returnList = empty([0, 0], dtype=object)

    for request in returnTemplate:
        if request == 'N_Li':
            returnList = append(returnList, atomCount(image_Li))
        elif request == 'N_Rb':
            returnList = append(returnList, atomCount(image_Rb))
        elif request == 'ID':
            returnList = append(returnList, os.path.split(shotPath)[-1])
        elif request == 'N_Rb_Gauss':
            returnList = append(returnList, atomCountGaussfit(gaussfitCoffRbH, gaussfitCoffRbV))
        elif request == 'N_Li_Gauss':
            returnList = append(returnList, atomCountGaussfit(gaussfitCoffLiH, gaussfitCoffLiV))
        elif request == 'fwhmH_Li':
            returnList = append(returnList, fwhm(gaussfitCoffLiH[1][2]))
        elif request == 'fwhmV_Li':
            returnList = append(returnList, fwhm(gaussfitCoffLiV[1][2]))
        elif request == 'fwhmH_Rb':
            returnList = append(returnList, fwhm(gaussfitCoffRbH[1][2]))
        elif request == 'fwhmV_Rb':
            returnList = append(returnList, fwhm(gaussfitCoffRbV[1][2]))
        elif request == 'OffH_Li':
            returnList = append(returnList, gaussfitCoffLiH[1][3])
        elif request == 'OffV_Li':
            returnList = append(returnList, gaussfitCoffLiV[1][3])
        elif request == 'OffH_Rb':
            returnList = append(returnList, gaussfitCoffRbH[1][3])
        elif request == 'OffV_Rb':
            returnList = append(returnList, gaussfitCoffRbV[1][3])
        elif request == 'PosH_Li':
            returnList = append(returnList, gaussfitCoffLiH[1][1])
        elif request == 'PosV_Li':
            returnList = append(returnList, gaussfitCoffLiV[1][1])
        elif request == 'PosH_Rb':
            returnList = append(returnList, gaussfitCoffRbH[1][1])
        elif request == 'PosV_Rb':
            returnList = append(returnList, gaussfitCoffRbV[1][1])
        elif request == 'AmpH_Li':
            returnList = append(returnList, gaussfitCoffLiH[1][0])
        elif request == 'AmpV_Li':
            returnList = append(returnList, gaussfitCoffLiV[1][0])
        elif request == 'AmpH_Rb':
            returnList = append(returnList, gaussfitCoffRbH[1][0])
        elif request == 'AmpV_Rb':
            returnList = append(returnList, gaussfitCoffRbV[1][0])
        elif request == 'T_Li':
            if abs(gaussfitCoffLiH[1][2] - gaussfitCoffLiV[1][2]) > (gaussfitCoffLiH[1][2]+gaussfitCoffLiV[1][2])/4:
                sigma = nan #max([gaussfitCoffLiV[1][2], gaussfitCoffLiH[1][2]])
                print 'T_Li not well determined!'
            else:
                sigma = (gaussfitCoffLiH[1][2]+gaussfitCoffLiV[1][2]) / 2
            returnList = append(returnList, temperatur(adwin.GetValue('ABB_TOF_LI', adwinFilename)*1e-6, sigma, 7, insituSizeLi))
        elif request == 'T_Rb':
            if abs(gaussfitCoffRbH[1][2] - gaussfitCoffRbV[1][2]) > (gaussfitCoffRbH[1][2]+gaussfitCoffRbV[1][2])/4:
                sigma = nan #max([gaussfitCoffRbV[1][2], gaussfitCoffRbH[1][2]])
                print 'T_Rb not well determined!'
            else:
                sigma = (gaussfitCoffRbH[1][2]+gaussfitCoffRbV[1][2]) / 2
            returnList = append(returnList, temperatur(adwin.GetValue('ABB_TOF_RB', adwinFilename)*1e-6, sigma, 87, insituSizeRb))
        else:
            returnList = append(returnList, adwin.GetValue(request, adwinFilename))

    return returnList
Example #3
0
    def drawImageArea(self, parameters):
        p = parameters
        ImageScale = array(p["part"]) * p["pixelSize"] * p["axScale"]
        data = pd.Series(zeros(len(p["values2calc"])), index=p["indexLst"], dtype=float)

        # image field
        if p["imageCategory"] == "opt. Dichte" or p["imageCategory"] == "ROI":
            image = p["fullFrame"][p["part"][0] : p["part"][1], p["part"][2] : p["part"][3]]
            if (p["part"][1] - p["part"][0] < 800 and p["part"][3] - p["part"][2] < 800) or p["imageCategory"] == "ROI":
                data = pd.Series(
                    imageAnalyse.analyseShot(p["adwinfile"], p["values2calc"], image), index=p["indexLst"], dtype=float
                )
            imageAtomCount = p["fullFrame"][
                p["partAtomCount"][0] : p["partAtomCount"][1], p["partAtomCount"][2] : p["partAtomCount"][3]
            ]
            data["n"] = imageAnalyse.analyseShot(p["adwinfile"], [p["values2calc"][0]], imageAtomCount)
            if p["ODmaxAuto"].get_active():
                p["ODmax"].set_value(imageAtomCount.max())
            if data["n"] < 1e6:
                title1 = p["imageAx"].set_title(
                    (r"N(" + p["species"] + r") = ${:,.2f}\,\times\,10^3$").format(data["n"] / 1e3)
                )
                if (
                    self.MessageType == "N_Li"
                    and p["species"] == "Li"
                    or self.MessageType == "N_Rb"
                    and p["species"] == "Rb"
                ):
                    self.windowMessage.set_markup(
                        u'<span font="120">N('
                        + p["species"]
                        + r")= "
                        + u"%.2f\u00d710\u00b3</span>" % (data["n"] / 1e3)
                    )
            else:
                title1 = p["imageAx"].set_title(
                    (r"N(" + p["species"] + r") = ${:,.2f}\,\times\,10^6$").format(data["n"] / 1e6)
                )
                if (
                    self.MessageType == "N_Li"
                    and p["species"] == "Li"
                    or self.MessageType == "N_Rb"
                    and p["species"] == "Rb"
                ):
                    self.windowMessage.set_markup(
                        u'<span font="120">N('
                        + p["species"]
                        + r")= "
                        + u"%.2f\u00d710\u2076</span>" % (data["n"] / 1e6)
                    )
        else:
            if p["imageCategory"] == "Atomrohbild":
                image = apogee.singleImage(p["filenames"][0], p["part"])
            elif p["imageCategory"] == "Hellrohbild":
                image = apogee.singleImage(p["filenames"][1], p["part"])
            elif p["imageCategory"] == "Dunkelrohbild":
                image = apogee.singleImage(p["filenames"][2], p["part"])
            title1 = p["imageAx"].set_title(p["species"] + r": " + p["imageCategory"])
            if p["ODmaxAuto"].get_active():
                p["ODmax"].set_value(image.max())
        p["imageObj"].set_data(image)
        p["imageObj"].set_extent([ImageScale[2], ImageScale[3], ImageScale[1], ImageScale[0]])
        p["imageObj"].set_clim(0, p["ODmax"].get_value())
        title1.set_fontsize(32)
        title1.set_y(1.04)
        if not data["t"] == 0 and not math.isnan(float(data["t"] * 1e6)):
            self.drawCrosshair(
                p["lineFitH"],
                p["lineFitV"],
                [
                    data["posh"] * p["pixelSize"] * p["axScale"] + ImageScale[2],
                    data["posv"] * p["pixelSize"] * p["axScale"] + ImageScale[0],
                ],
            )
        else:
            self.drawCrosshair(p["lineFitH"], p["lineFitV"], [-1e5, -1e5])

        # linescan gaussian fit
        p["linescanAx"].cla()
        p["linescanAx"].plot(linspace(ImageScale[2], ImageScale[3], size(image, 1)), imageAnalyse.linescan(image))
        p["linescanAx"].plot(
            linspace(ImageScale[2], ImageScale[3], size(image, 0)), imageAnalyse.linescan(image, dir=1), color="0.85"
        )
        if math.isnan(float(data["t"] * 1e6)):
            title3 = p["linescanAx"].set_title(u"T(" + p["species"] + r") uneindeutig")
            p["linescanAx"].text(
                0.02, 0.05, u"TOF = {:.2f}ms".format(data["abb_tof"] / 1e3), transform=p["linescanAx"].transAxes
            )
        elif data["t"] == 0:
            title3 = p["linescanAx"].set_title("")
        else:
            title3 = p["linescanAx"].set_title(u"T(" + p["species"] + u") = {:.2f}\u00b5K".format(data["t"] * 1e6))
            p["linescanAx"].text(
                0.02,
                0.85,
                u"H-Pos: {:.2f}\u00b5m".format(data["posh"] * p["pixelSize"] * p["axScale"] + ImageScale[2]),
                transform=p["linescanAx"].transAxes,
            )
            p["linescanAx"].text(
                0.02,
                0.7,
                u"H-FWHM: {:.2f}\u00b5m".format(data["fwhmh"] * p["axScale"]),
                transform=p["linescanAx"].transAxes,
            )
            p["linescanAx"].text(
                0.98,
                0.85,
                u"V-Pos: {:.2f}\u00b5m".format(data["posv"] * p["pixelSize"] * p["axScale"] + ImageScale[0]),
                transform=p["linescanAx"].transAxes,
                color="0.7",
                horizontalalignment="right",
            )
            p["linescanAx"].text(
                0.98,
                0.7,
                u"V-FWHM: {:.2f}\u00b5m".format(data["fwhmv"] * p["axScale"]),
                transform=p["linescanAx"].transAxes,
                color="0.7",
                horizontalalignment="right",
            )
            p["linescanAx"].plot(
                linspace(ImageScale[2], ImageScale[3], size(image, 1)),
                imageAnalyse.gauss(
                    range(0, size(image.conj().transpose(), 0)),
                    data["amph"],
                    data["posh"],
                    imageAnalyse.fwhm(data["fwhmh"], reverse=1),
                    data["offh"],
                ),
                "--",
            )
            p["linescanAx"].plot(
                linspace(ImageScale[2], ImageScale[3], size(image, 0)),
                imageAnalyse.gauss(
                    range(0, size(image.conj().transpose(), 1)),
                    data["ampv"],
                    data["posv"],
                    imageAnalyse.fwhm(data["fwhmv"], reverse=1),
                    data["offv"],
                ),
                "--",
                color="0.85",
            )
            p["linescanAx"].plot(
                [
                    data["posh"] * p["pixelSize"] * p["axScale"] + ImageScale[2],
                    data["posh"] * p["pixelSize"] * p["axScale"] + ImageScale[2],
                ],
                p["linescanAx"].get_ylim(),
                "k:",
            )
            posVrelAxH = (data["posv"] * p["pixelSize"] * p["axScale"]) / (ImageScale[1] - ImageScale[0]) * (
                ImageScale[3] - ImageScale[2]
            ) + ImageScale[2]
            p["linescanAx"].plot([posVrelAxH, posVrelAxH], p["linescanAx"].get_ylim(), ":", color="0.5")
            p["linescanAx"].plot([p["Marker1Pos"][0], p["Marker1Pos"][0]], p["linescanAx"].get_ylim(), "k-")
            posVrelAxHMarker1 = (p["Marker1Pos"][1] - ImageScale[0]) / (ImageScale[1] - ImageScale[0]) * (
                ImageScale[3] - ImageScale[2]
            ) + ImageScale[2]
            p["linescanAx"].plot([posVrelAxHMarker1, posVrelAxHMarker1], p["linescanAx"].get_ylim(), "-", color="0.85")
            p["linescanAx"].text(
                0.02, 0.05, u"TOF = {:.2f}ms".format(data["abb_tof"] / 1e3), transform=p["linescanAx"].transAxes
            )
            if not data["automatisierung"] == 0:
                p["linescanAx"].text(
                    0.98,
                    0.05,
                    u"auto: {:.0f}/{:.0f} #{:.0f}".format(
                        data["auto_step_pos"], abs(data["auto_break"]), data["auto_n_pos"]
                    ),
                    transform=p["linescanAx"].transAxes,
                    horizontalalignment="right",
                )
        p["linescanAx"].set_xlim((ImageScale[2], ImageScale[3]))
        p["linescanAx"].grid(True, color="0.5")
        p["linescanAx"].set_xlabel(u"\u00b5m")
        p["linescanAx"].ticklabel_format(style="sci", axis="y", scilimits=(0, 3))
        title3.set_fontsize(18)
        title3.set_y(1.06)
        p["canvasObj"].draw_idle()
        return data
Example #4
0
def analyseShot(shotPath,
                returnTemplate,
                image=[],
                filenames=['li_roi.fit', 'rb_roi.fit'],
                insituSizeLi=40e-6,
                insituSizeRb=40e-6):
    """
    returns measurment data of a single shot. Posible values for returnTemplate:
        * ID:            ADwin ID
        * ADwin varname: ADwin code value
        * N_Li/N_Rb:     atomnumber Li/Rb
        * e.g. fwhmH_Li: cloud width h/v
        * T_Li/T_Rb:     temperature
        * etc...
    """
    import os
    import adwin
    import apogee

    if image != []:
        image_Li = image
        image_Rb = image
        adwinFilename = shotPath
    else:
        if 'N_Li' in returnTemplate or 'fwhmH_Li' in returnTemplate or 'fwhmV_Li' in returnTemplate or 'T_Li' in returnTemplate:
            image_Li = apogee.singleImage(os.path.join(shotPath, filenames[0]))
        if 'N_Rb' in returnTemplate or 'fwhmH_Rb' in returnTemplate or 'fwhmV_Rb' in returnTemplate or 'T_Rb' in returnTemplate:
            image_Rb = apogee.singleImage(os.path.join(shotPath, filenames[1]))
        adwinFilename = os.path.join(shotPath, 'adwin_code.acm')

    if 'AmpH_Li' in returnTemplate or 'OffH_Li' in returnTemplate or 'PosH_Li' in returnTemplate or 'fwhmH_Li' in returnTemplate or 'N_Li_Gauss' in returnTemplate or 'T_Li' in returnTemplate:
        gaussfitCoffLiH = gaussfit(image_Li)
    if 'AmpV_Li' in returnTemplate or 'OffV_Li' in returnTemplate or 'PosV_Li' in returnTemplate or 'fwhmV_Li' in returnTemplate or 'N_Li_Gauss' in returnTemplate or 'T_Li' in returnTemplate:
        gaussfitCoffLiV = gaussfit(image_Li, dir=1)
    if 'AmpH_Rb' in returnTemplate or 'OffH_Rb' in returnTemplate or 'PosH_Rb' in returnTemplate or 'fwhmH_Rb' in returnTemplate or 'N_Rb_Gauss' in returnTemplate or 'T_Rb' in returnTemplate:
        gaussfitCoffRbH = gaussfit(image_Rb)
    if 'AmpV_Rb' in returnTemplate or 'OffV_Rb' in returnTemplate or 'PosV_Rb' in returnTemplate or 'fwhmV_Rb' in returnTemplate or 'N_Rb_Gauss' in returnTemplate or 'T_Rb' in returnTemplate:
        gaussfitCoffRbV = gaussfit(image_Rb, dir=1)

    returnList = empty([0, 0], dtype=object)

    for request in returnTemplate:
        if request == 'N_Li':
            returnList = append(returnList, atomCount(image_Li))
        elif request == 'N_Rb':
            returnList = append(returnList, atomCount(image_Rb))
        elif request == 'ID':
            returnList = append(returnList, os.path.split(shotPath)[-1])
        elif request == 'N_Rb_Gauss':
            returnList = append(
                returnList, atomCountGaussfit(gaussfitCoffRbH,
                                              gaussfitCoffRbV))
        elif request == 'N_Li_Gauss':
            returnList = append(
                returnList, atomCountGaussfit(gaussfitCoffLiH,
                                              gaussfitCoffLiV))
        elif request == 'fwhmH_Li':
            returnList = append(returnList, fwhm(gaussfitCoffLiH[1][2]))
        elif request == 'fwhmV_Li':
            returnList = append(returnList, fwhm(gaussfitCoffLiV[1][2]))
        elif request == 'fwhmH_Rb':
            returnList = append(returnList, fwhm(gaussfitCoffRbH[1][2]))
        elif request == 'fwhmV_Rb':
            returnList = append(returnList, fwhm(gaussfitCoffRbV[1][2]))
        elif request == 'OffH_Li':
            returnList = append(returnList, gaussfitCoffLiH[1][3])
        elif request == 'OffV_Li':
            returnList = append(returnList, gaussfitCoffLiV[1][3])
        elif request == 'OffH_Rb':
            returnList = append(returnList, gaussfitCoffRbH[1][3])
        elif request == 'OffV_Rb':
            returnList = append(returnList, gaussfitCoffRbV[1][3])
        elif request == 'PosH_Li':
            returnList = append(returnList, gaussfitCoffLiH[1][1])
        elif request == 'PosV_Li':
            returnList = append(returnList, gaussfitCoffLiV[1][1])
        elif request == 'PosH_Rb':
            returnList = append(returnList, gaussfitCoffRbH[1][1])
        elif request == 'PosV_Rb':
            returnList = append(returnList, gaussfitCoffRbV[1][1])
        elif request == 'AmpH_Li':
            returnList = append(returnList, gaussfitCoffLiH[1][0])
        elif request == 'AmpV_Li':
            returnList = append(returnList, gaussfitCoffLiV[1][0])
        elif request == 'AmpH_Rb':
            returnList = append(returnList, gaussfitCoffRbH[1][0])
        elif request == 'AmpV_Rb':
            returnList = append(returnList, gaussfitCoffRbV[1][0])
        elif request == 'T_Li':
            if abs(gaussfitCoffLiH[1][2] - gaussfitCoffLiV[1][2]) > (
                    gaussfitCoffLiH[1][2] + gaussfitCoffLiV[1][2]) / 4:
                sigma = nan  #max([gaussfitCoffLiV[1][2], gaussfitCoffLiH[1][2]])
                print 'T_Li not well determined!'
            else:
                sigma = (gaussfitCoffLiH[1][2] + gaussfitCoffLiV[1][2]) / 2
            returnList = append(
                returnList,
                temperatur(
                    adwin.GetValue('ABB_TOF_LI', adwinFilename) * 1e-6, sigma,
                    7, insituSizeLi))
        elif request == 'T_Rb':
            if abs(gaussfitCoffRbH[1][2] - gaussfitCoffRbV[1][2]) > (
                    gaussfitCoffRbH[1][2] + gaussfitCoffRbV[1][2]) / 4:
                sigma = nan  #max([gaussfitCoffRbV[1][2], gaussfitCoffRbH[1][2]])
                print 'T_Rb not well determined!'
            else:
                sigma = (gaussfitCoffRbH[1][2] + gaussfitCoffRbV[1][2]) / 2
            returnList = append(
                returnList,
                temperatur(
                    adwin.GetValue('ABB_TOF_RB', adwinFilename) * 1e-6, sigma,
                    87, insituSizeRb))
        else:
            returnList = append(returnList,
                                adwin.GetValue(request, adwinFilename))

    return returnList