def Write_out(self, filename=None, overwrite="ask"):
        """
        Writes the treated data to a file
        """
        if filename is None:
            if self["H"] == "0.0" or self["symmetrize"] is False:
                filename = self["filename"].replace(".dat", "-treated.dat")
            else:
                filename = self["filename"].replace(".dat", "-sym-treated.dat")
        else:
            filename = os.path.abspath(filename)

        parameters1 = ["sample", "date", "mount", "probe", "H"]
        parameters2 = ["w", "t", "L"]
        measures = ["T_av", "T0", "Tp", "Tm", "dTx", "kxx", "dTy", "kxy"]
        columns = ["T_av(K)", "T0(K)", "T+(K)", "T-(K)",
                   "dTx(K)", "kxx(W/Km)", "dTy(K)", "kxy(W/Km)"]
        if self["H"] == "0.0":
            measures = measures[0:6]
            columns = columns[0:6]
        else:
            pass

        columns = "\t".join(columns)

        comments1 = "\n".join(["%s\t=\t%s" % (i, self[i])
                               for i in parameters1])
        comments2 = "\n".join(["%s\t=\t%1.3e" % (i, self[i])
                               for i in parameters2])
        header = comments1+"\n"+comments2+"\n"+columns
        data = np.array([self[i] for i in measures]).T

        U.write_to_file(filename, data, header, overwrite=overwrite)
    def Plot_fancy(self, *args, **kwargs):
        """
        Just like Plot_all but with a fancy layout that is more suited to
        ipython notebooks
        """

        remove = ["T_av", "T0", "Tp", "Tm", "I_fit", "T0_fit"]

        measures = [i for i in self.measures if i not in remove]
        ref_meas = ["kxx", "kxx/T", "kxy", "kxy/kxx", "dTx",
                    "dTx/T", "dTy", "dTy/dTx", "Resistance", "Tp_Tm"]
        measures = [i for i in ref_meas if i in measures]

        n = len(measures)

        fig, ax = V.create_grid(n)

        try:
            show = kwargs["show"]
            kwargs.pop("show")
        except KeyError:
            show = None

        try:
            filename = kwargs["filename"]
            kwargs.pop("filename")
        except KeyError:
            filename = None

        try:
            overwrite = kwargs["overwrite"]
            kwargs.pop("overwrite")
        except KeyError:
            overwrite = "ask"

        for i in range(n):
            self.Plot(measures[i], *args, show=None,
                      fig=fig, ax=ax[i], **kwargs)

        if hasattr(self, "__sample") is True:
            plt.suptitle(self["sample"], y=0.95, fontsize=22)
        else:
            pass

        fig.tight_layout(rect=[0.01, 0.01, 1, 0.96])

        if filename is not None:
            filename = os.path.abspath(filename)
            U.save_to_pdf(filename, fig, overwrite=overwrite)
        else:
            pass

        if show is True:
            plt.show()
        elif show is False:
            plt.close()
        else:
            pass

        return fig, ax
    def Plot_all(self, *args, **kwargs):
        """
        Plots all non trivial measures, all the same kwargs as Conductivity.Plot
        with the addition of filename to save the file.
        """

        remove = ["T_av", "T0", "Tp", "Tm", "T0_fit", "I_fit"]
        measures = [i for i in self.measures if i not in remove]
        figures = []

        try:
            filename = kwargs["filename"]
            kwargs.pop("filename")
        except KeyError:
            filename = None

        try:
            overwrite = kwargs["overwrite"]
            kwargs.pop("overwrite")
        except KeyError:
            overwrite = "ask"

        for key in measures:
            figures.append(self.Plot(key, *args, **kwargs)[0])

        if filename is not None:
            filename = os.path.abspath(filename)
            U.save_to_pdf(filename, figures, overwrite=overwrite)
        else:
            pass

        return
    def __init__(self, filename=None, w=1e-6, t=1e-6, L=1e-6, sign=1, **kwargs):

        self.parameters = []
        self.measures = []
        self.raw_data = []
        # Check for some specific kwargs and update kwargs
        self["force_kxy"], kwargs = self.__check_force_kxy(**kwargs)
        self["symmetrize"], kwargs = self.__check_symmetrize(**kwargs)
        self["sign"] = self.__check_sign(sign)
        self["gain"], kwargs = self.__check_gain(**kwargs)

        if filename is not None:
            filename = os.path.abspath(filename)
            self["filename"] = filename
            self["filetype"] = self.__check_filetype(filename)

            # Find info
            self.__add_parameters(w, t, L)

            # If the file contains raw data
            if self["filetype"] == "raw":

                # If symmetrize is True
                if self["H"] != "0.0" and self["symmetrize"] is True:
                    filename2 = U.get_symetric_file(filename)
                    raw_data = self.__Symmetrize(filename, filename2)
                elif self["H"] != "0.0" and self["symmetrize"] is False:
                    if filename.find("--") != -1:
                        self["H"] = "-"+self["H"]
                        raw_data = U.read_file_raw(filename)
                    else:
                        raw_data = U.read_file_raw(filename)

                else:
                    raw_data = U.read_file_raw(filename)

                for key, values in raw_data.items():
                    self[key] = values
                    self.raw_data.append(key)

                self.__Analyze(self["gain"])
                self.__add_measure()

            # If the file contains treated data 
            elif self["filetype"] == "treated":
                data = U.read_file_treated(filename)

                for key, values in data.items():
                    self[key] = values
                    self.measures.append(key)
                    self.__add_measure()


        # Remaining kwargs are set as parameters
        for key, value in kwargs.items():
            self[key] = value
            self.parameters.append(key)

        return
Beispiel #5
0
    def __init__(self, filename=None):

        # Importing dictionaries
        self["dict_measures"] = D.log_data_dict
        self["dict_parameters"] = D.parameters_dict

        # Initializing lists
        self.measures = []
        self.parameters = []

        if filename is not None:
            # Read the file
            filename = os.path.abspath(filename)
            header = U.read_header(filename)

            # Find the parameters
            self["H"] = U.find_H(filename)
            self["date"] = U.find_date(filename)
            self["mount"] = U.find_mount(filename)
            self["probe"] = U.find_probe(filename, header)
            self["sample"] = U.find_sample(filename, header)
            self.parameters += ["H", "date", "mount", "probe", "sample"]

            # Find the measurements
            log_data = U.read_file_log(filename)

            for key, value in log_data.items():
                self[key] = value
                self.measures.append(key)

        return
Beispiel #6
0
    def __init__(self, filename=None, **kwargs):
        """
        Used to initialize a Measurement object

        Parameters:
        ------------------------------------------------------------------------
        filename :  str
                The path to the file containing the data to be read and stored.
                Can be relative or absolute.

        Useful kwargs:
        ------------------------------------------------------------------------
        H, w, t, L :    int or float
                The value of the magnetic field used during the experiment and
                the geometric parameters of the sample. Note that kwargs are
                case sensitive and are used to populate the parameters attribute
                of the object
        sample :   str
                The name of the sample.
        """

        self.measures = []
        self.parameters = []

        if filename is not None:
            filename = os.path.abspath(filename)
            data = U.read_file_treated(filename)
            header = U.read_header(filename)
            for key, value in data.items():
                self[key] = value
                self.measures.append(key)

            self["H"] = U.find_H(filename, header)
            self["date"] = U.find_date(filename, header)
            self["mount"] = U.find_mount(filename, header)
            self["sample"] = U.find_sample(filename, header)
            self["probe"] = U.find_probe(filename, header)

            self.parameters += ["H", "date", "mount", "sample", "probe"]

        for key, value in kwargs.items():
            self[key] = value
            if key not in self.parameters:
                self.parameters.append(key)

        if hasattr(self, "__sample") is False:
            setattr(self, "__sample", "unknown")
        else:
            pass
        if hasattr(self, "__H") is False:
            setattr(self, "__H", "unknown")
        else:
            pass

        self.__add_measure()

        return
    def __add_parameters(self, width, thickness, length):

        filename = self["filename"]
        header = U.read_header(filename)
        parameters = []

        # Geometric parameters
        self["w"] = width
        self["t"] = thickness
        self["L"] = length

        # Other parameters
        self["H"] = U.find_H(filename, header)
        self["date"] = U.find_date(filename, header)
        self["mount"] = U.find_mount(filename, header)
        self["sample"] = U.find_sample(filename, header)
        self["probe"] = U.find_probe(filename, header)

        # Add to parameters
        parameters += ["H", "date", "mount", "sample", "probe"]
        parameters += ["w", "t", "L"]

        self.parameters += parameters

        return
    def __Symmetrize(self, filename, filename2):
        anti_sym = ["dTy_0", "dTy_Q"]

        if filename.find("--") != -1:
            filename, filename2 = filename2, filename
        else:
            pass

        data = U.read_file_raw(filename)
        data2 = U.read_file_raw(filename2)

        sym_data = dict()

        for key, values in data.items():
            if key in data2:
                if key in anti_sym:
                    sym_data[key] = 0.5*(data[key]-data2[key])
                else:
                    sym_data[key] = 0.5*(data[key]+data2[key])
            else:
                pass

        return sym_data
    def __check_filetype(self, filename):
        filename = os.path.abspath(filename)
        columns = U.read_header(filename)[-1].split("\t")

        raw_data = 0
        measures = 0
        for key, values in self.__dict_raw.items():
            for v in values:
                if v in columns:
                    raw_data += 1
                else:
                    measures += 1

        if raw_data > measures:
            filetype = "raw"
        else:
            filetype = "treated"

        return filetype
Beispiel #10
0
    def Plot_fancy(self, *args, **kwargs):
        """
        Just like Plot_all but with a fancy layout that is more suited to
        ipython notebooks
        """

        remove = ["T_av", "T0", "Tp", "Tm"]
        if len(self.measurements) > 1:
            remove.append("Tp_Tm")
        else:
            pass
        measures = [i for i in self.measures if i not in remove]
        ref_meas = [
            "kxx", "kxx/T", "kxy", "kxy/T", "dTx", "dTx/T", "dTy", "dTy/dTx",
            "Resistance"
        ]
        measures = [i for i in ref_meas if i in measures]

        n = len(measures)
        fig, ax = V.create_grid(n)

        try:
            show = kwargs["show"]
            kwargs.pop("show")
        except KeyError:
            show = True

        # Tries to find sample name
        if "sample" in self.parameters:
            sample = self.measurements[0]["sample"]
            for m in self.measurements:
                if sample == m["sample"]:
                    pass
                else:
                    sample = None
                    break

        try:
            filename = kwargs["filename"]
            kwargs.pop("filename")
        except KeyError:
            filename = None

        try:
            overwrite = kwargs["overwrite"]
            kwargs.pop("overwrite")
        except KeyError:
            overwrite = "ask"

        for i in range(n):
            self.Plot(measures[i],
                      *args,
                      show=None,
                      fig=fig,
                      ax=ax[i],
                      **kwargs)

        if sample is not None:
            plt.suptitle(sample, y=0.95, fontsize=22)
        else:
            pass

        fig.tight_layout(rect=[0.01, 0.01, 1, 0.95])

        if filename is not None:
            filename = os.path.abspath(filename)
            U.save_to_pdf(filename, fig, overwrite=overwrite)
        else:
            pass

        if show is True:
            plt.show()
        elif show is False:
            plt.close()
        else:
            pass

        return fig, ax
    def Current(self, _min, _max, deg=5, T_max=100, N=100, *args, **kwargs):
        """
        Used to compute the optimal current function for the sample.

        Parameters:
        ------------------------------------------------------------------------
        _min, _max: int or float
                The min/max of dT/T in percentages

        deg:        int
                The degree of the polynomial fit

        T_max:      int or float
                T0 max for the plot

        N:          int
                Number of points in the plot
        """

        directory = os.path.split(self["filename"])[0]
        rnge = "%1.0f%s_to_%1.0f%s.dat" % (_min, "%", _max, "%")
        name = "_".join([self["sample"].replace(" ", "_"), "dTovT", rnge])
        datafile = os.path.join(directory, name)
        n = self["T_av"].shape[0]
        dT_T = np.linspace(_min/100, _max/100, n)
        alpha = self["w"]*self["t"]/self["L"]
        I = np.sqrt(self["kxx"]*alpha*self["T_av"]*dT_T/5000)
        coeff_I = np.polyfit(self["T0"], I, deg)
        poly_func = np.poly1d(coeff_I)
        T0 = np.linspace(0, T_max, N)
        I_fit = poly_func(T0)

        self["T0_fit"] = T0
        self["I_fit"] = I_fit*1000
        self["coeff_I"] = coeff_I
        self.measures += ["T0_fit", "I_fit"]

        # Looks for show as kwarg
        try:
            show = kwargs["show"]
            if type(show) is not bool:
                if show is not None:
                    raise TypeError("show must be of type bool or None")
                else:
                    kwargs.pop("show")
            else:
                kwargs.pop("show")
        except KeyError:
            show = True

        try:
            filename = kwargs["filename"]
            kwargs.pop("filename")
        except KeyError:
            filename = None

        label = r"$\Delta$ T / T from %1.2f%s to %1.2f%s" % (
            _min, "%", _max, "%")

        fig, ax = self.Plot("I_fit", x_axis="T0_fit", show=None, parameters=[])
        plt.figtext(1-0.005, 0.005, label, fontsize=14,
                    va="baseline", ha="right")

        if show is True:
            plt.show()
        elif show is False:
            plt.close()
        else:
            pass

        if filename is not None:
            filename = os.path.abspath(filename)
            U.save_to_pdf(filename, fig)
        else:
            pass

        try:
            write = kwargs["write"]
            kwargs.pop("write")
        except KeyError:
            write = True

        if write is True:
            degrees = np.array([i for i in range(coeff_I.shape[0])])
            data = np.array([degrees, coeff_I[::-1]]).T
            header = "Current function coefficients\norder\tcoeff"
            U.write_to_file(datafile, data, header, fmt=["%i", "%,18e"])
        else:
            pass

        return