def main(): io = Io() io.eval_args() ret = {'ok': True} cmc = False base_doc = io.get_base_doc("se3") for id in io.ids: doc = io.get_doc_db(id) if io.update: doc = io.update_cal_doc(doc, base_doc) cal = Cal(doc) ana = Analysis(doc, analysis_type="direct") cus_dev = init_customer_device(doc) cus_dev.range_trans(ana) cal.temperature_comp(ana) cal.temperature_gas_direct(ana) cal.pressure_gn_corr(ana) cal.pressure_gn_mean(ana) temperature_dict = ana.pick_dict('Temperature', 'compare') gas = cal.Aux.get_gas() ind_dict = cal.Pres.get_dict('Type', 'ind') offset_dict = cal.Pres.get_dict('Type', 'ind_offset') range_dict = cal.Range.get_dict('Type', 'ind') ind = cus_dev.pressure(ind_dict, temperature_dict, range_dict=range_dict, unit=ana.pressure_unit, gas=gas) offset = cus_dev.pressure(offset_dict, temperature_dict, range_dict=range_dict, unit=ana.pressure_unit, gas=gas) ana.store("Pressure", "ind", ind, ana.pressure_unit) ana.store("Pressure", "offset", offset, ana.pressure_unit) ana.store("Pressure", "ind_corr", ind - offset, ana.pressure_unit) # error for rating procedures p_ind = ana.pick("Pressure", "ind_corr", cal.unit) p_cal = ana.pick("Pressure", "cal", cal.unit) ana.store('Error', 'ind', p_ind / p_cal - 1.0, '1') ## uncert. calculation uncert = Uncert(doc) ## we have cmc entries for the FRS ## so we can use the GN uncertainty u = uncert.contrib_pressure_fill(p_cal, cal.unit) ana.store("Uncertainty", "standard", u / p_cal, "1") io.save_doc(ana.build_doc()) print(json.dumps(ret))
def main(): io = Io() io.eval_args() ret = {"ok": True} result_type = "sens" i_unit = "A" for id in io.ids: doc = io.get_doc_db(id) tdo = ToDo(doc) if tdo.type not in ["sens"]: sys.exit("wrong script") if tdo.type == "sens": result_type = "sens" display = Display(doc) cus_dev = init_customer_device(doc) analysis = doc.get("Calibration").get("Analysis") ## wrong type: del analysis["Values"]["Sensitivity"] ana = Analysis(doc, init_dict=analysis, analysis_type=result_type) res = Result(doc, result_type=result_type, skip=io.skip) ## conversion to ana.pressure_unit if necessary cal_dict = ana.pick_dict("Pressure", "cal") p_ind_corr = ana.pick("Pressure", "ind_corr", i_unit) p_ind = ana.pick("Pressure", "ind", i_unit) p_ind_offset = ana.pick("Pressure", "ind_offset", i_unit) if cal_dict.get("Unit") != ana.pressure_unit: p_cal = ana.pick("Pressure", "cal", tdo.pressure_unit) conv = ana.Const.get_conv(from_unit=tdo.pressure_unit, to_unit=ana.pressure_unit) p_cal = p_cal * conv else: p_cal = ana.pick("Pressure", "cal", ana.pressure_unit) T_gas = ana.pick("Temperature", "Tuhv", "K") T_room = ana.pick("Temperature", "Troom", "K") if T_room is None: T_room = T_gas u_std = ana.pick("Uncertainty", "uncertPcal_rel", "1") ## recal Sensitivity s = p_ind_corr / (cus_dev.emis_current(i_unit) * p_cal) ana.store("Pressure", "cal", p_cal, ana.pressure_unit) ana.store("Pressure", "offset", p_ind_offset, i_unit) ana.store("Sensitivity", "gauge", s, "1/{}".format(ana.pressure_unit)) ana.store("Uncertainty", "standard", u_std, "1") ana.store("Temperature", "gas", T_gas, "K") ana.store("Temperature", "room", T_room, "K") conv = ana.Const.get_conv(from_unit=ana.pressure_unit, to_unit=tdo.pressure_unit) average_index = tdo.make_average_index(p_cal * conv, tdo.pressure_unit, max_dev=0.2) ## will be filled up with aux values: d = {} display.check_outlier_sens(ana) average_index, reject_index = ana.ask_for_reject( average_index=average_index) flat_average_index = ana.flatten(average_index) if result_type == "sens": T, Tu = ana.ask_for_bake_out_temperature() if T is not None: d["Bakeout"] = True d["BakeoutTemperature"] = float(T) d["BakeoutTemperatureUnit"] = Tu t, tu = ana.ask_for_bake_out_time() d["BakeoutTime"] = float(t) d["BakeoutTimeUnit"] = tu else: d["Bakeout"] = False p, pu, t, tu = ana.ask_for_sputter() if T is not None: d["Sputter"] = True d["SputterPressure"] = float(p) d["SputterPressureUnit"] = pu d["SputterTime"] = float(t) d["SputterTimeUnit"] = tu else: d["Sputter"] = False d["AverageIndex"] = average_index d["AverageIndexFlat"] = flat_average_index ana.store_dict(quant="AuxValues", d=d, dest=None) ## rm values p_cal = np.take(p_cal, flat_average_index) p_ind_corr = np.take(p_ind_corr, flat_average_index) s = np.take(s, flat_average_index) ## store reduced quant. for plot ana.store("Pressure", "red_ind_corr", p_ind_corr, i_unit, dest="AuxValues") ana.store("Pressure", "red_cal", p_cal, ana.pressure_unit, dest="AuxValues") ana.store("Sensitivity", "red_gauge", s, "1/{}".format(ana.pressure_unit), dest="AuxValues") ## offset contrib cus_dev.coll_uncert(ana, ind_unit=i_unit) ## default uncert. contrib. repeat cus_dev.repeat_uncert(ana, ind_unit=i_unit) cus_dev.digit_uncert(ana, ind_unit=i_unit) cus_dev.emis_uncert(ana, ind_unit=i_unit) cus_dev.device_uncert(ana) ## the uncertainty of the standard is # already calculated at analysis step ana.total_uncert() ## store red version for plot u_rep = ana.pick("Uncertainty", "repeat", "1") u_off = ana.pick("Uncertainty", "offset", "1") u_tot = ana.pick("Uncertainty", "total_rel", "1") u_dev = ana.pick("Uncertainty", "device", "1") u_std = ana.pick("Uncertainty", "standard", "1") ana.store("Uncertainty", "red_u_rep", np.take(u_rep, flat_average_index), "1", dest="AuxValues") ana.store("Uncertainty", "red_u_std", np.take(u_std, flat_average_index), "1", dest="AuxValues") ana.store("Uncertainty", "red_u_dev", np.take(u_dev, flat_average_index), "1", dest="AuxValues") ana.store("Uncertainty", "red_u_tot", np.take(u_tot, flat_average_index), "1", dest="AuxValues") ana.store("Uncertainty", "red_u_off", np.take(u_off, flat_average_index), "1", dest="AuxValues") display.plot_uncert(ana) # start making data sections res.make_measurement_data_section(ana, result_type=result_type) # start build cert table p_cal_mv, p_ind_mv, s_mv, u_mv = res.make_sens_table( ana, pressure_unit=ana.pressure_unit, sens_unit='1/Pa', uncert_unit="1", ind_unit="A") ana.store("Pressure", "ind_mean", p_ind_mv, i_unit, dest="AuxValues") ana.store("Pressure", "cal_mean", p_cal_mv, ana.pressure_unit, dest="AuxValues") ana.store("Sensitivity", "gauge_mean", s_mv, "1/{}".format(ana.pressure_unit), dest="AuxValues") ana.store("Uncertainty", "total_mean", u_mv, "1", dest="AuxValues") display.plot_mean(ana) doc = ana.build_doc("Analysis", doc) doc = res.build_doc("Result", doc) io.save_doc(doc)
def main(): io = Io() io.eval_args() args = sys.argv fail = False ret = {'ok': True} unit = "Pa" if '--ids' in args: idx_ids = args.index('--ids') + 1 try: ids = args[idx_ids] ids = ids.split('@') except: fail = True if not fail and len(ids) > 0: for id in ids: id = id.replace("\"", "") ## ------------------------- ## se3 ## ------------------------- base_doc_se3 = io.get_base_doc("se3") doc = io.get_doc_db(id) doc = io.update_cal_doc(doc, base_doc_se3) res = Analysis(doc, analysis_type="expansion") uncert_se3 = UncertSe3(doc) cal_se3 = CalSe3(doc) f_names = cal_se3.get_expansion_name() f_name = f_names[0] cal_se3.pressure_gn_corr(res) cal_se3.pressure_gn_mean(res) cal_se3.temperature_before(res) cal_se3.temperature_after(res) cal_se3.real_gas_correction(res) cal_se3.correction_delta_height(res) rg = res.pick("Correction", "rg", "1") dh = res.pick("Correction", "delta_heigth", "1") p_0 = res.pick("Pressure", "fill", unit) T_0 = res.pick("Temperature", "before", "K") T_1 = res.pick("Temperature", "after", "K") u_p_0 = uncert_se3.contrib_pressure_fill(p_0, unit, skip_type="A") u_T_1 = uncert_se3.contrib_temperature_vessel(T_1, "K", skip_type="A") u_T_0 = uncert_se3.contrib_temperature_volume_start(T_0, "K", f_names, skip_type="A") ## ------------------------- ## p_nd ## ------------------------- customer_device = doc['Calibration']['CustomerObject'] CustomerDevice = Cdg(doc, customer_device) temperature_dict = res.pick_dict('Temperature', 'before') gas = cal_se3.get_gas() ind_dict = cal_se3.Pres.get_dict('Type', 'nd_ind') offset_dict = cal_se3.Pres.get_dict('Type', 'nd_offset') ind = CustomerDevice.pressure(ind_dict, temperature_dict, unit=unit, gas=gas) offset = CustomerDevice.pressure(offset_dict, temperature_dict, unit=unit, gas=gas) p_nd = ind - offset u_p_nd = CustomerDevice.get_total_uncert(p_nd, unit, unit, skip_type="A") ## ------------------------- ## frs5 ## ------------------------- base_doc_frs5 = io.get_base_doc("frs5") doc = io.update_cal_doc(doc, base_doc_frs5) res = Analysis(doc, analysis_type="expansion") cal_frs = CalFrs(doc) res = Analysis(doc) uncert = UncertFrs(doc) cal_frs.temperature(res) cal_frs.pressure_res(res) cal_frs.pressure_cal(res) uncert.total_standard(res, no_type_a=True) p_1 = res.pick("Pressure", "cal", unit) u_p_1 = res.pick("Uncertainty", "standard", "1") * p_1 ## ------------------------- ## f ## ------------------------- corr_tem = T_0 / T_1 f = (p_1 - p_nd) / (p_0 * rg * dh) * corr_tem s_p_1 = 1 / p_0 * corr_tem s_p_0 = -(p_1 - p_nd) / (p_0**2) * corr_tem s_p_nd = 1 / p_0 * corr_tem s_T_0 = (p_1 - p_nd) / (p_0) / T_1 s_T_1 = -(p_1 - p_nd) / (p_0) * T_0 / T_1**2 uc_p_1 = (s_p_1 * u_p_1) uc_p_0 = (s_p_0 * u_p_0) uc_p_nd = (s_p_nd * u_p_nd) uc_T_1 = (s_T_1 * u_T_1) uc_T_0 = (s_T_0 * u_T_0) u = (uc_p_1**2 + uc_p_0**2 + uc_p_nd**2 + uc_T_1**2 + uc_T_0**2)**0.5 res.store("Expansion", f_name, f, "1") res.store("Pressure", "nd_offset", offset, unit) res.store("Pressure", "nd_corr", p_nd, unit) res.store("Uncertainty", "nd_corr", u_p_nd, unit) res.store("Pressure", "fill", p_0, unit) res.store("Uncertainty", "fill", u_p_0, unit) res.store("Pressure", "cal", p_1, unit) res.store("Uncertainty", "cal", u_p_1 * p_1, unit) res.store("Temperature", "before", T_0, "K") res.store("Temperature", "after", T_1, "K") res.store("Uncertainty", "before", u_T_0, "K") res.store("Uncertainty", "after", u_T_1, "K") res.store("Uncertainty", "total", u, "1") res.store("Correction", "delta_heigth", dh, "1") res.store("Correction", "rg", rg, "1") res.store("Correction", "temperature", corr_tem, "1") doc = res.build_doc() doc["Calibration"]["Standard"] = [ base_doc_se3["Standard"], base_doc_frs5["Standard"] ] io.save_doc(doc) print("------------------- p_nd:") print(p_nd) print(ind_dict["SdValue"]) print(offset_dict["SdValue"]) print("-------------------u p_0:") print(u_p_0 / p_0) print("-------------------u p_1:") print(u_p_1) print("-------------------u p_nd:") print(u_p_nd) #f = np.delete(f, f.argmin()) #f = np.delete(f, f.argmax()) print("-------------------f:") print(f) print(np.mean(f)) print(np.std(f)) print(np.std(f) / np.mean(f)) print(np.std(f) / np.mean(f) / (len(f) - 1)**0.5) print("-------------------u:") print(u / f)
def main(io, config): io.eval_args() doc = {"_id": "cal-sim-se3", "Calibration":{"ToDo":{"Standard": "SE3", "Type": "error"}, "Measurement":{}}} struct_path = config.get("struct_path") values_file = config.get("values_file") cal_file = config.get("cal_file") ##----------------------------------------- ## standard ##----------------------------------------- base_doc = io.get_base_doc("se3") doc = io.update_cal_doc(doc, base_doc) vals = io.read_json("{}/{}".format(struct_path, values_file)) aux_vals = io.read_json("{}/meas_aux_values.json".format(struct_path)) ana_aux_vals = io.read_json("{}/ana_aux_values.json".format(struct_path)) doc['Calibration']['Measurement']['Values'] = vals doc['Calibration']['Measurement']['AuxValues'] = aux_vals ##----------------------------------------- ## device ##----------------------------------------- doc['Calibration']['CustomerObject'] = config.get("customer_object") ##----------------------------------------- ## ini ##----------------------------------------- ana = Analysis(doc, insert_dict={'AuxValues': ana_aux_vals}, analysis_type="expansion") cal = Cal(doc) cal.all(ana) Uncert(doc).total(ana) cus_dev = init_customer_device(doc) gas = config.get("gas") temperature_dict = ana.pick_dict('Temperature', 'after') offset_dict = cal.Pres.get_dict('Type', 'ind_offset' ) ind_dict = cal.Pres.get_dict('Type', 'ind' ) range_dict = cal.Range.get_dict('Type', 'ind' ) offset = cus_dev.pressure(offset_dict, temperature_dict, range_dict=range_dict, unit = cal.unit, gas=gas) ind = cus_dev.pressure(ind_dict, temperature_dict, range_dict=range_dict, unit = cal.unit, gas=gas) ana.store("Pressure", "offset", offset, cal.unit) ana.store("Pressure", "ind", ind, cal.unit) ana.store("Pressure", "ind_corr", ind - offset, cal.unit) p_ind = ana.pick("Pressure", "ind_corr", cal.unit) p_cal = ana.pick("Pressure", "cal" , cal.unit) ana.store('Error', 'ind', p_ind/p_cal-1, '1') cus_dev.range_trans(ana) cus_dev.offset_uncert(ana) cus_dev.repeat_uncert(ana, cmc=False) if "uncert_dict" in dir(cus_dev): u_add = cus_dev.get_total_uncert(meas_vec=p_ind, meas_unit=ana.pressure_unit, return_unit=ana.error_unit, res=ana, skip_source="standard", prefix=False) cus_dev.device_uncert(ana) ana.total_uncert() with open("{}/{}".format(struct_path, cal_file), 'w') as f: json.dump(ana.build_doc(), f, indent=4, ensure_ascii=False)
def main(): io = Io() io.eval_args() ret = {'ok':True} cmc = True base_doc = io.get_base_doc("se3") for id in io.ids: id = id.replace("\"", "") doc = io.get_doc_db(id) if io.update: doc = io.update_cal_doc(doc, base_doc) cal = Cal(doc) if io.auxval: ## get new the AuxValues from related (meas_date) state measurement meas_date = cal.Date.first_measurement() state_doc = io.get_state_doc("se3", date=meas_date) ana = Analysis(doc, analysis_type="expansion") cal.insert_state_results(ana, state_doc) else: ## keep AuxValues from Calibration.Analysis.AuxValues auxvalues = doc.get('Calibration').get('Analysis', {}).get('AuxValues', {}) ana = Analysis(doc, insert_dict={'AuxValues': auxvalues}, analysis_type="expansion") cus_dev = init_customer_device(doc) uncert = Uncert(doc) cal.pressure_gn_corr(ana) cal.pressure_gn_mean(ana) cal.deviation_target_fill(ana) cal.temperature_before(ana) cal.temperature_after(ana) cal.temperature_room(ana) cal.temperature_gas_expansion(ana) cal.real_gas_correction(ana) cal.volume_add(ana) cal.volume_start(ana) cal.expansion(ana) cal.pressure_rise(ana) cal.correction_delta_height(ana) cal.correction_f_pressure(ana) cal.pressure_cal(ana) cal.error_pressure_rise(ana) cal.deviation_target_cal(ana) ## uncert. calculation if cmc: # bis update CMC Einträge --> vorh. CMC Einträge # cal uncertainty of standard uncert.cmc(ana) else: uncert.define_model() uncert.gen_val_dict(ana) uncert.gen_val_array(ana) uncert.volume_start(ana) uncert.volume_5(ana) uncert.pressure_fill(ana) uncert.temperature_after(ana) uncert.temperature_before(ana) uncert.expansion(ana) uncert.total(ana) ## calculate customer indication gas = cal.Aux.get_gas() temperature_dict = ana.pick_dict('Temperature', 'after') offset_dict = cal.Pres.get_dict('Type', 'ind_offset' ) ind_dict = cal.Pres.get_dict('Type', 'ind' ) range_dict = cal.Range.get_dict('Type', 'ind' ) offset = cus_dev.pressure(offset_dict, temperature_dict, range_dict=range_dict, unit = cal.unit, gas=gas) ind = cus_dev.pressure(ind_dict, temperature_dict, range_dict=range_dict, unit = cal.unit, gas=gas) ana.store("Pressure", "offset", offset, cal.unit) ana.store("Pressure", "ind", ind, cal.unit) ana.store("Pressure", "ind_corr", ind - offset, cal.unit) p_ind = ana.pick("Pressure", "ind_corr", cal.unit) p_cal = ana.pick("Pressure", "cal" , cal.unit) if cal.ToDo.type == "error": ana.store('Error', 'ind', p_ind/p_cal-1, '1') cus_dev.range_trans(ana) if cal.ToDo.type == "sigma": ana.store('Error', 'ind', p_ind/p_cal-1, '1') ## used for check analysis ana.store('Sigma', 'eff', p_ind/p_cal, '1') io.save_doc(ana.build_doc()) print(json.dumps(ret))