Commit ac7d9666 authored by LorenzoMonti's avatar LorenzoMonti
Browse files

add a function to calculate frequency trace (x axis) and new plot functions

parent 29dccd39
Loading
Loading
Loading
Loading
+34 −13
Original line number Diff line number Diff line
@@ -56,34 +56,43 @@ def set_SPA_for_measure(ms2830a, config_file, manual_command):
        
        return log_list

#########################
#         PLOT          #
#########################

def plot_lineplot(trace):
        """
        Plot trace retrieved from Anritsu MS2830A Signal Source Analyzer
        Utily function to plot trace retrieved from Anritsu MS2830A Signal Source Analyzer
        
        """
        x = np.arange(len(trace)) # x axis
        x = calcFrequency() # x axis
        dataset = pd.DataFrame({"points": x , "dbM": trace})

        sns.set_style("darkgrid")
        sns.lineplot(x="points", y="dbM", data=dataset)
        plt.show()

def plot_Trx_Tm(trace1, trace2):
        x = np.arange(len(trace1)) # x axis
        dataset = pd.DataFrame({ "Trx": trace1, "Tm": trace2})

        sns.set_style("darkgrid")
        sns.lineplot(data=dataset)
        plt.show()
def plot_results(trx, tm, dr, mr, upperBound, lowerBound):
        """
        Utily function to plot calculated data (trx, tm, dr, mr and bounds)
        
def plot_Dr_Mr(trace1, trace2, upperBound, lowerBound):
        x = np.arange(len(trace1)) # x axis
        dataset = pd.DataFrame({ "Dr": trace1, "Mr": trace2, "Upperbound": upperBound, "Lowerbound": lowerBound})
        """
        dataset1 = pd.DataFrame({ "Trx": trx, "Tm": tm})
        dataset2 = pd.DataFrame({ "Dr": dr, "Mr": mr, "Upperbound": upperBound, "Lowerbound": lowerBound})

        fig, axs = plt.subplots(ncols=2, figsize=(18, 10))
        fig.suptitle('Measure results')
        axs[0].set_title('Trx and Tm')
        axs[1].set_title('Dr and Mr')
        sns.set_style("darkgrid")
        sns.lineplot(data=dataset)
        sns.lineplot(ax=axs[0], data=dataset1)
        sns.lineplot(ax=axs[1], data=dataset2)
        plt.show()

#########################
#     FILE MANAGER      #
#########################

def save_data_as_csv(trace):
        """
        Utility function for saving data in csv extension
@@ -136,6 +145,18 @@ def getWatts(dBm):
    """
    return map(dBm2W, dBm)

def calcFrequency():
    """
    Function used to calculate the x-axis of the trace (frequencies)
    
    """
    config_file = read_config_file("../config/config_MS2830A.json")
    
    tmp_freq = ((config_file["stop_freq"] - config_file["start_freq"]) / (config_file["sweep_trace_points"] - 1))
    frequency = [(config_file["start_freq"] + (tmp_freq * i)) for i in range(0, config_file["sweep_trace_points"]) ]
    
    return frequency

def getCalculus(traces, Tc = 77, Th = 297):
    """
    Function that returns useful calculus from trace data
+6 −6
Original line number Diff line number Diff line
@@ -155,17 +155,17 @@ def measure(self, TNotebook1):
            watt_traces = list()
            for trace in self._traces:
                watt_traces.append(np.array(list(Utils.getWatts(trace))))

            # get frequency
            self.frequency = Utils.calcFrequency() 
            # get calculus
            self.dMeasure, self.drMeasure, self.Pc, self.PcPlusM, self.PhPlusM, self.Ph, self.Yvalue, self.Trx, self.Tm, self.Thm = Utils.getCalculus(watt_traces, float(self.MeasureEntry3.get()), float(self.MeasureEntry4.get()))
            # traspose rows in columns
            self.columns_trace = zip(self._traces[0], self._traces[1], self._traces[2], 
            self.columns_trace = zip(self.frequency, self._traces[0], self._traces[1], self._traces[2], 
                                self._traces[3], self._traces[4], self.dMeasure, self.drMeasure, 
                                self.Pc, self.PcPlusM, self.PhPlusM, self.Ph, self.Yvalue, self.Trx, self.Tm, self.Thm) 

            Utils.plot_Trx_Tm(self.Trx, self.Tm)
            Utils.plot_Dr_Mr(self.drMeasure, (self.Tm/self.Thm), float(self.BoundEntry1.get()), float(self.BoundEntry2.get()))

            Utils.plot_results(self.Trx, self.Tm, self.drMeasure, (self.Tm/self.Thm), float(self.BoundEntry1.get()), float(self.BoundEntry2.get()))
            self.ButtonMeasure2.config(state=NORMAL)
            self.TextMeasure1.insert(tk.END, "\nAll measurements were successful\n")
            self.Message5.configure(background="#d9d9d9", font=("Helvetica",10))
@@ -208,7 +208,7 @@ def measure(self, TNotebook1):
            # Channel and Polarization
            writer.writerow(["Date/hour: " + str(datetime.datetime.now()),"Channel: " + str(self.MeasureEntry1.get()), "Polarization: " + str(self.MeasureEntry2.get())])
            # titles
            writer.writerow(["RAW:Pc", "RAW:Pc + m", "RAW:Ph + m", "RAW:Ph", "RAW:Pc'", "dMeasure", "drMeasure", "Pc", "PcPlusM", "PhPlusM", "Ph", "Yvalue", "Trx", "Tm", "Thm"])  
            writer.writerow(["Frequency","RAW:Pc", "RAW:Pc + m", "RAW:Ph + m", "RAW:Ph", "RAW:Pc'", "dMeasure", "drMeasure", "Pc", "PcPlusM", "PhPlusM", "Ph", "Yvalue", "Trx", "Tm", "Thm"])  
            # traces and calculus
            for column_trace in self.columns_trace:
                writer.writerow(column_trace)