def ratioerror(self, shuntv, xv, yv, shunt, comr, nomexcitation, full_scale): """ Calculates the measured ratio error. All parameters are lists of data from :param shuntv: shuntv: voltage measured across the shunt on the secondary monitoring the primary current :param xv: xv: real part of voltage across the common resistor :param yv: imaginary part of the voltage across the common resistor :param shunt: value of the secondary shunt :param comr: value of the common resistor :param nomexcitation: nominal excitation list, e.g. 10%, 20% ... 120% :return: a list of errors, a list of actual excitation levels and a list of the matching nominal excitations """ # TODO consider a 'swap' flag for where the nominal reference ratio was actually on the UUT side e = [] # list of error e1 at each excitation level excite = [] # matching list of fractional excitation level nom_excite = [] # matched nominal excitation level for i in range(len(xv)): xvolt = xv[i] * gtc.ureal(1.0, self.sr830, self.df_sr830, label = 'sr830 '+ repr(xv[i])) #type B xvolt = xvolt + gtc.ureal(0.0, self.cmnmode, self.df_cmnmode, label = 'common mode ' + repr(xvolt.x)) yvolt = yv[i] * gtc.ureal(1.0, self.sr830, self.df_sr830, label='sr830 '+ repr(yv[i])) # type B yvolt = yvolt + gtc.ureal(0.0, self.cmnmode, self.df_cmnmode, label='common mode '+ repr(yvolt.x)) ecurrent = (xvolt + 1j * yvolt) / comr[i] # difference current measured by SR830 current = shuntv[i] / shunt[i] # primary = secondary current e_answer = gtc.result((ecurrent/current), 'my label') # key intermiediate result? decide later e.append(e_answer) excite.append(current / full_scale * 100) # note this is a ureal nom_excite.append( min(nomexcitation, key=lambda x: abs(x - excite[i].x))) # finds closest nominal excitation level return e, excite, nom_excite
import GTC as gtc x = gtc.ureal(0.0, 0.1, 5) y = gtc.ureal(0.0, 0.2, 10) a = x * y print(a.u) b = gtc.function.mul2(x, y) print(b) ab = gtc.result(a * b, label='result') print(ab.label, ab)