Skip to content
Snippets Groups Projects
Commit fc56fad2 authored by Ute Becker's avatar Ute Becker :relaxed:
Browse files

Auswerteprogramme TL1 und TL2

parent 76a13d06
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 5 09:51:18 2023
@author: becker07
"""
#!/usr/bin/env python
import os
import time
import datetime
import elabapi_python
from elabapi_python.rest import ApiException
import requests
import json
import couchdb
import numpy as np
from urllib3.exceptions import InsecureRequestWarning
from urllib3 import disable_warnings
couch = couchdb.Server('http://a73434.berlin.ptb.de:5984')
db = couch['vl_db'] # existing
#########################
# CONFIG #
#########################
API_HOST_URL = 'https://elabftw.ptb.de/api/v2'
# replace with your api key
API_KEY = 'a2c6b77fdd5b19b35b3043dbfd5ac73883c4265ab210a3672037ace64a6207cfa4231a0a834ed30c19be8'
# number of days to look back
#########################
# END CONFIG #
#########################
# Configure the api client
configuration = elabapi_python.Configuration()
configuration.api_key['api_key'] = API_KEY
configuration.api_key_prefix['api_key'] = 'Authorization'
configuration.host = API_HOST_URL
configuration.debug = False
configuration.verify_ssl = True
# create an instance of the API class
api_client = elabapi_python.ApiClient(configuration)
# fix issue with Authorization header not being properly set by the generated lib
api_client.set_default_header(header_name='Authorization', header_value=API_KEY)
# create an instance of Experiments
experimentsApi = elabapi_python.ExperimentsApi(api_client)
uploadsApi = elabapi_python.UploadsApi(api_client)
# create an instance of Tags
api_instance = elabapi_python.TagsApi(api_client)
# calculate the date
today = datetime.date.today()
########
elab_id=640
cers = ["75562_0001","75563_0001","75564_0001","75565_0001","75566_0001","75567_0001","75568_0001","75569_0001","75570_0001","75571_0001","75572_0001","75573_0001"] # Beispiel: cers = ["75511_0001","75512_0001"]
TL1_2= "FM1" #### FM1 oder TLA
year = "2024"
kk= "KK"
commentar = ''
################################
# get experiment with ID xxxx
exp = experimentsApi.get_experiment(elab_id)
print('='*72)
print('\n ******** Experiment {} (Original): \n'.format(elab_id), exp)
print('\n ******** Experiment-Body ', exp.body)
print('\n ******** Experiment-Tags ', exp.userid)
print('='*72)
#################################
if kk == "KK":
type_k = "-kk-"
tag_type = "KK"
#################################
if TL1_2 == "TLA":
tl="-tl2"
json_file = "cal-" + year + tl + type_k + cers[0]
print(json_file)
doc = db.get(json_file)
STD1 ="TLA"
STD2 ="TL2"
tab_begin=' </p><table style="border-collapse:collapse;width:100%;height:100%;"><tr style="height:16px;"><td style="width:33.3222%;height:16px;">DB-Link</td><td style="width:33.3222%;height:16px;">p-upstream</td><td style="width:33.3222%;height:16px;">Gas</td></tr>'
else :
tl="-fm1"
json_file = "cal-" + year + tl + type_k + cers[0]
print(json_file)
doc = db.get(json_file)
Type_k =(doc["Calibration"]["Type"])
STD1 ="TLV"
STD2 ="FM1"
tab_begin=' </p><table style="border-collapse:collapse;width:100%;height:100%;"><tr style="height:16px;"><td style="width:33.3222%;height:16px;">DB-Link</td><td style="width:33.3222%;height:16px;">Ventil</td><td style="width:33.3222%;height:16px;">Gas</td></tr>'
# Die Überschrift wird zusammengesetzt
title1=doc["Calibration"]["Customer"]["Sign"]
body_title = STD1 + ' / ' + STD2 + ' Kalibrierung [' + title1 + ']'
# Die Tabelle wird zusammengesetzt
body_begin='<p> '
#tab_begin=' </p><table style="border-collapse:collapse;width:100%;height:100%;"><tr style="height:16px;"><td style="width:33.3222%;height:16px;">DB-Link</td><td style="width:33.3222%;height:16px;">p-upstream</td><td style="width:33.3222%;height:16px;">Gas</td></tr>'
text1='<tr style="height:16px;"><td style="width:33.3222%;height:16px;"><a href="http://a73434.berlin.ptb.de:5984/_utils/#database/vl_db/'
text1_1='tl2'
text1_2='-'
text1_3='kk'
text1_4='-'
text2='" target="_blank" rel="noreferrer noopener">cal-'
text3='</a></td><td style="width:33.3222%;height:16px;">'
text4='</td><td style="width:33.3222%;height:16px;">'
text5='</td></tr>'
tab_end='</table><p> </p><p> </p>'
# Die Tags werden zusammengesetzt
json_file_tag = "cal-" + year + tl + type_k + cers[0]
doc_tag = db.get(json_file_tag)
ReferenceNo =doc_tag["Calibration"]["Presettings"]["CommonReferenceNo"]
print('stopp')
Type_k =(doc_tag["Calibration"]["Type"])
CustomerSign =(doc_tag["Calibration"]["Customer"]["Sign"])
len_cers=len(cers)
val = ""
size = len_cers
tab_body = [val] * size
p_up = [val] * size
gas = [val] * size
vent = [val] * size
print('111111111', tab_body)
if TL1_2 == 'TLA':
i = 0
while i < len(cers):
json_file = "cal-" + year + tl + type_k + cers[i]
print(json_file)
doc = db.get(json_file)
p_up[i]=doc["Calibration"]["Result"]["Formula"]["PressureUpstream"]
gas[i]=doc["Calibration"]["ToDo"]["Gas"]
body=text1 + json_file + text2+ year +tl + type_k + cers[i]+ text3 + p_up[i] + text4 + gas[i] + text5
tab_body[i] = body
p_up[i]=np.array(doc["Calibration"]["Result"]["Formula"]["PressureUpstream"])
i += 1
else :
i = 0
while i < len(cers):
json_file = "cal-" + year + tl + type_k + cers[i]
print(json_file)
x = cers[i][:5]
doc = db.get(json_file)
name_plot= "Scan_" + x + ".pdf"
file_plot= 'C:/Users/becker07/python/TL1/' + name_plot
name_Scan_json= "Scan" + x + ".pdf"
file_json= 'C:/Users/becker07/python/TL1/' + name_Scan_json
attachment = db.get_attachment(doc, "Scan.pdf").read()
with open(file_json, 'wb') as pdf_object:
pdf_object.write(attachment)
uploadsApi.post_upload('experiments', elab_id, file=file_json, comment='Plot: Signal und Offset vom Leck')
os.remove(file_json)
gas[i]=doc["Calibration"]["ToDo"]["Gas"]
vent[i]=doc["Calibration"]["Result"]["Formula"]["Valve"]
body=text1 + json_file + text2 + year + tl + type_k + cers[i]+ text3 + vent[i] + text4 + gas[i] + text5
tab_body[i] = body
i += 1
text_all= ''.join(tab_body)
body_tab=body_begin + commentar + tab_begin + text_all + tab_end
now = datetime.datetime.now()
#new_body='<p>Neu von UteXX x({})</p>'.format(now.strftime('%Y-%m-%d %H:%M:%S'))
data_body = { 'body': body_tab}
data_title = {'title': body_title}
print('elab_id= ', elab_id)
# === Modifizieren der Einträge (hier Eintrag "body") ===
response_body = experimentsApi.patch_experiment(elab_id, body=data_body)
response_title = experimentsApi.patch_experiment(elab_id, body=data_title)
data_tag={ 'tag': ReferenceNo}
response_tag = api_instance.post_tag('experiments', elab_id, body=data_tag)
data_tag={ 'tag': Type_k}
response_tag = api_instance.post_tag('experiments', elab_id, body=data_tag)
data_tag={ 'tag': STD1}
response_tag = api_instance.post_tag('experiments', elab_id, body=data_tag)
data_tag={ 'tag': STD2}
response_tag = api_instance.post_tag('experiments', elab_id, body=data_tag)
data_tag={ 'tag': CustomerSign}
response_tag = api_instance.post_tag('experiments', elab_id, body=data_tag)
#response = experimentsApi.patch_experiment(elab_id, tags=new_tags)
print('='*72)
# === der modifizierte Zustand ===
print('\n******** Experiment {} (modifiziert): \n'.format(elab_id), response_body)
print('='*72)
# -*- coding: utf-8 -*-
"""
Created on Fri Jul 1 12:12:37 2022
@author: becker07
"""
from matplotlib import pyplot as plt
from statistics import mean
from datetime import datetime
from IPython.display import Markdown as md
import numpy as np
import math
import statistics
import pandas as pd
import json
import couchdb
couch = couchdb.Server('http://a73434.berlin.ptb.de:5984')
db = couch['vl_db'] # existing
## Eingabe von:
# - Kalibrierscheinnummer
# - Jahr der Kalibrierung
# - laufende Nummer der Kalibrierung
cal_cert = "75552"
year = "2024"
no = "0001"
json_file = "cal-" + year + "-tl2-kk-" + cal_cert + "_" + no
doc = db.get(json_file)
# Die Daten aus dem File mit der entsprechenden Kalibrierscheinnummer werden eingelesen:
# datum, time, p_up und alle Temperaturen,
datei = cal_cert + "PTB" + year
datei_S = cal_cert + "PTB" + year + "_S"
print(json_file)
datei_pkt = pd.read_csv(datei, sep="\t", decimal = ',' )
datei_S_pkt = pd.read_csv(datei_S, sep="\t", decimal = ',' )
datum=datei_pkt["Datum"]
time=datei_pkt["Zeit"]
p_up=datei_pkt["Druck"]
p_up=np.array(p_up)
p_up = np.asarray(p_up, dtype=float)
q_tab=datei_pkt["q_mol"]
T_room=datei_pkt["Raumtemperatur"]
T_h2o=datei_pkt["T-H2O"]
T_wv=datei_pkt["T-WV"]
T_tl=datei_pkt["T-TL"]
T_rv=datei_pkt["T-RV"]
p_atm=datei_pkt["Umgebungsdruck p_0"]*100 # Umrechnung in Pa
m_sz = datei_pkt["m-SZ"]
m1_drift = datei_pkt["m1_D"]
m2_drift = datei_pkt["m2_D"]
print(p_atm)
# Die Werte der Sägezähne befinden sich im File "Kalibrierscheinnummer_S".
# Da pro Messpunkt 2 Sägezähne gefahren werden, existieren auch für jeden Messpunkt
# jeweils zwei Zeiten t_i und zwei Hübe l_1
l_1=datei_S_pkt["pos1_i"]
l_2=datei_S_pkt["pos2_i"]
l_pos= l_1-l_2
l_i=datei_S_pkt["h_i"]
t_i=datei_S_pkt["t_i"]
# Im File Datei_S sind die einzelnen Hübe l_i der Nadel in einer Spalte gespeichert, der Hub l
# muss daher in Hub l_1 und l_2 aufgegliedert werden, da in der Regel 2 Sägezähne gefahren werden.
l_1=l_pos[0::2] # Begonnen wird in der Spalte beim Element 0 bis zum Ende der Spalte in zweier Schritte
l_2=l_pos[1::2] # Begonnen wird in der Spalte beim Element 1 bis zum Ende der Spalte in zweier Schritte
#l_1=np.genfromtxt(datei_S,skip_header=1,usecols=(2)) #### wenn nur 1 SZ vorhanden
# Das gleiche gilt für die Zeit t_i
t_1=t_i[0::2] # Begonnen wird in der Spalte beim Element 0 bis zum Ende der Spalte in zweier Schritte
t_2=t_i[1::2] # Begonnen wird in der Spalte beim Element 1 bis zum Ende der Spalte in zweier Schritte
#t_1=np.genfromtxt(datei_S,skip_header=1,usecols=(3))#### wenn nur 1 SZ vorhanden
# Temperatur
lis_T_h2o = T_h2o.tolist()
lis_T_room = T_room.tolist()
lis_T_tl = T_tl.tolist()
lis_T_wv = T_wv.tolist()
lis_T_rv = T_rv.tolist()
# Druck
lis_p_atm = p_atm.tolist()
lis_p_up = p_up.tolist()
# Drift
lis_m1_drift = m1_drift.tolist()
lis_m2_drift = m2_drift.tolist()
lis_m_sz = m_sz.tolist()
# Datum
lis_date = datum.tolist()
lis_dtime = time.tolist()
lis_l1 = l_1.tolist()
lis_l2 = l_2.tolist()
lis_t1 = t_1.tolist()
lis_t2 = t_2.tolist()
print(lis_l1 ,lis_l2 ,lis_t1 ,lis_t2 )
datum_meas = lis_date[0:1]
print(lis_T_room)
doc["Calibration"]["Measurement"]["Values"]={"Temperature": [{"Unit": "C","Type": "T-H2O ","Comment":"Temperatur T ","Value": lis_T_h2o},
{"Unit": "C","Type": "T-Room","Comment":"Temperatur T","Value": lis_T_room},
{"Unit": "C","Type": "T-TL ","Comment":"Temperatur T","Value": lis_T_tl},
{"Unit": "C","Type": "T-WV ","Comment":"Temperatur T","Value": lis_T_wv},
{"Unit": "C","Type": "T-RV ","Comment":"Temperatur T","Value": lis_T_rv}],
"Pressure": [{"Unit": "mbar","Type": "Atmosparic pressure ","Value": lis_p_atm},
{"Unit": "bar","Type": "Upstream pressure ","Value": lis_p_up}],
"Time": [{"Unit": "s","Type": "Zeit des ersten Sägezahns ","Value": lis_t1},
{"Unit": "s","Type": "Zeit des zweiten Sägezahns ","Value": lis_t2}],
"L": [{"Unit": "mm","Type": "Hub des ersten Sägezahns ","Value": lis_l1},
{"Unit": "mm","Type": "Hub des zweiten Sägezahns ","Value": lis_l2}],
"Drift": [{"Unit": "mbar/s","Type": "Steigung des Sägezahns ","Value": lis_m_sz},
{"Unit": "mbar/s","Type": "Drift des ersten Sägezahns ","Value": lis_m1_drift},
{"Unit": "mbar/s","Type": "Drift des zweiten Sägezahns ","Value": lis_m2_drift}],
"DateTime": [{"Unit": "yyyy-mm-dd","Type": "Date ","Value": lis_date},
{"Unit": "hh:mm","Type": "Time ","Value": lis_dtime}]}
doc["Calibration"]["Measurement"]["Date"]=[{"Type": "measurement","Value":datum_meas}]
db.save(doc)
import time
import couchdb
from datetime import date
couch = couchdb.Server('http://a73434.berlin.ptb.de:5984')
db = couch['vl_db'] # existing
cal_cert = "75204"
year = "2023"
no = "0001"
# Druckanzeige pup_cus_ptb = 0 (PTB/Wika) ; pup_cus_ptb = 1 (customer)
#pup_cus_ptb = 0
# Druckanzeige durch eine Interpolation intp = 0 (PTB) ; intp = 1 (customer)
#intp = 1
CertificateDate = str(date.today())
json_file_cer = "cer-" + year + "-" + cal_cert
print(json_file_cer)
### Kontrolle ob schon ein cer existiert #########
id_cer = 0
mango = {'selector': {'_id':json_file_cer}}
for i in db.find(mango):
id_cer = 1
print(id_cer)
doc = {'_id': json_file_cer}
if id_cer == 0:
db.save(doc)
print ( "Warten! 30 Sekunden" )
time.sleep ( 30 )
print ( json_file_cer," ist in der Couch angelegt" )
else:
print ( json_file_cer," ist bereits in der Couch angelegt" )
id_ = "cal-" + year + "-tl2-kk-" + cal_cert + "_" + no
ks = "C:\\Users\\becker07\\kalibrierschein\\ks-" + cal_cert + "-" + year + ".tex"
cer = "cer-" + year + "-" + cal_cert
json_file_cal = id_
json_file_cer = cer
doc_cal = db.get(json_file_cal)
doc_cer = db.get(json_file_cer)
##### Daten aus dem cal Dokument werden eingelesen#######
std = doc_cal["Calibration"]["ToDo"]["Standard"]
kind = doc_cal["Calibration"]["ToDo"]["Type"]
gas = doc_cal["Calibration"]["ToDo"]["Gas"]
lang = doc_cal["Calibration"]["Customer"]["Lang"]
todo = doc_cal["Calibration"]["ToDo"]["Type"]
analy = doc_cal["Calibration"]["Result"]["Formula"]["Analyses"]
###### Überprüfung welches Todo #########################
if "flow_std" in todo:
res = 1 # Reservoir res = 1 (ja) ; res = 0 (nein)
pup_cus_ptb = 1 # Druckanzeige pup_cus_ptb = 0 (PTB/Wika) ; pup_cus_ptb = 1 (customer)
else:
res = 0 # Reservoir res = 1 (ja) ; res = 0 (nein)
pup_cus_ptb = 0 # Druckanzeige pup_cus_ptb = 0 (PTB/Wika) ; pup_cus_ptb = 1 (customer)
print(lang)
calibration_type = "KK"
last_cert_no = doc_cal["Calibration"]["Presettings"]
###### überprüfen ob eine letztes Cal-Zeichen gibt #########################
if "LastCalibrationYear" in last_cert_no:
print("\"last_cert_no\" ist vorhanden.")
last_cert_no = doc_cal["Calibration"]["Presettings"]["LastCalibrationCertificate"]
last_cert_year = doc_cal["Calibration"]["Presettings"]["LastCalibrationYear"]
last_cert = last_cert_no + "\\,PTB\\," + last_cert_year[2:]
sectionDiscription_noyes= "yes"
print(last_cert)
else:
print("\"last_cert_no\" ist nicht vorhanden.")
sectionDiscription_noyes= "no"
last_cert = ""
Standard = doc_cal["Calibration"]["ToDo"]["Standard"]
Land= doc_cal["Calibration"]["Customer"]["Address"]["Land"]
##### Titlepage #######
Certificate = str(doc_cal["Calibration"]["Certificate"])
ReferenceNo = doc_cal["Calibration"]["Presettings"]["ReferenceNo"]
Name= doc_cal["Calibration"]["Customer"]["Name"]
AddName= doc_cal["Calibration"]["Customer"]["AddName"]
Street= doc_cal["Calibration"]["Customer"]["Address"]["Street"]
Town= doc_cal["Calibration"]["Customer"]["Address"]["Town"]
Zipcode= doc_cal["Calibration"]["Customer"]["Address"]["Zipcode"]
ObjectOfCalibration= doc_cal["Calibration"]["CustomerObject"]["Type"]
Producer= doc_cal["Calibration"]["CustomerObject"]["Device"]["Producer"]
Type= doc_cal["Calibration"]["CustomerObject"]["Device"]["Type"] ########## Type
Object= doc_cal["Calibration"]["CustomerObject"]["Type"] ########## Gegenstand/Object
Serial= doc_cal["Calibration"]["CustomerObject"]["Name"] ########## Kennummer
Examiner= doc_cal["Calibration"]["Measurement"]["Maintainer"]
ByOrder= "Dr. Matthias Bernien"
MeasurementDate= doc_cal["Calibration"]["Result"]["Formula"]["MeasurementDate"]
print(MeasurementDate)
obj ='\\object{'+ Object + '}\n'
manufacturer = '\\manufacturer{' + Producer +' }\n'
typ = '\\type{' + Type + '}\n'
serialNo = '\\serialNo{' + Serial + '}\n'
applicant = '\\applicant{{' + Name + '}\n {' + Street + '} \n {' + Zipcode + Town +'}\n {' + Land+'}}\n'
refNo = '\\refNo{ ' + ReferenceNo + '}\n'
calibMark = '\\calibMark{ ' +' ' + Certificate + ' PTB 23}\n'
calibDate = '\\calibDate{' + MeasurementDate + '}\n'
examiner = '\\examiner{' + Examiner + '}\n'
certificateDate = '\\certificateDate{' + CertificateDate + '}\n'
################## Ergebnisse ###################################################
NoOfMeasurements= doc_cal["Calibration"]["Result"]["Formula"]["NoOfMeasurements"]
TemperatureTL= doc_cal["Calibration"]["Result"]["Formula"]["TemperatureTL"]
PressureUpstream= doc_cal["Calibration"]["Result"]["Formula"]["PressureUpstream"]
PressureUpstreamMin= doc_cal["Calibration"]["Result"]["Formula"]["PressureUpstreamMin"]
PressureUpstreamMax= doc_cal["Calibration"]["Result"]["Formula"]["PressureUpstreamMax"]
LeakUncertainty= doc_cal["Calibration"]["Result"]["Formula"]["LeakUncertainty"]
PressureAtmosmin= doc_cal["Calibration"]["Result"]["Formula"]["PressureAtmosmin"] ####### Pascal
a =float(PressureUpstreamMin)
b = f'{a:1f}'
PressureUpstreamMin = b[:-2]
PressureAtmosmax= doc_cal["Calibration"]["Result"]["Formula"]["PressureAtmosmax"]
a =float(PressureUpstreamMax)
b = f'{a:1f}'
PressureUpstreamMax = b[:-2]
FlowMol= doc_cal["Calibration"]["Result"]["Formula"]["FlowMol"]
FlowpV= doc_cal["Calibration"]["Result"]["Formula"]["FlowpV"]
LeakUncertainty= doc_cal["Calibration"]["Result"]["Formula"]["LeakUncertainty"]
TextDE= doc_cal["Calibration"]["CustomerObject"]["Text"]["description"]["de"]
TextEN= doc_cal["Calibration"]["CustomerObject"]["Text"]["description"]["en"]
###############################################################################################################################################################
####### Überschriften ######################
######## Deutsch ##########################
sectionDescriptionTitle = 'Beschreibung zum Kalibriergerät'
sectionTitelProcedure = 'Kalibrierverfahren '
sectionTitelResult = 'Messergebnis '
sectionTitelUncertainty = 'Unsicherheit '
######## Englisch ##########################
sectionDescriptionTitle_en = 'Description relating to calibration device'
sectionTitelProcedure_en = 'Calibration procedure '
sectionTitelResult_en = 'Measurement results'
sectionTitelUncertainty_en = 'Uncertainty of Calibration'
####### Überschriften Ende ######################
####### Formeln ####################
q_pV_allg = ' \\[ q_{pV} = p_{\\text{atm}} \\cdot \\frac{\\Delta V}{\\Delta t}\\] \n '
q_mol_allg = ' \\[ q_\\text{mol} = \\frac{q_{pV}}{RT}\\] \n '
q_mol_Val= 'q_\\text{mol}(\\vartheta_\\text{TL}) =\\SI{ ' + FlowMol + ' }{\\mol\\per\\second}'
q_pV_Val_all = '\\[q_{pV}(\\vartheta_\\text{Ch}) = q_{\\text{mol}}(\\vartheta_\\text{TL})\\cdot R \\cdot (\\vartheta_\\text{Ch} + T_0)\\] '
q_pV_Val = 'q_{pV}(\\SI{23}{\\degreeCelsius})= \\num{' + FlowpV + '} ~\\text{Pa}~\\text{m}^3~\\text{s}^{-1}' ######### Wichtig beim deutsch/englisch Text , der Wert steht beim Englisch in einer Zeile
######## Tabellen um die Formeln zu zentriert. Bei den deutsch englischen Kalibrierschein stehen beide Ergebnisse direkt untereinander###########################
tab_q_mol_Val= '\\begin{center}\\begin{tabular}[h]{c} $$$' + q_mol_Val + '$$$ \\\\ $$$\\begin{english} ' + q_mol_Val + ' \\end{english}$$$ \\end{tabular}\\end{center}'
tab_q_mol_Val_en= ' \\[ ' + q_mol_Val + '\\] \n'
tab_q_pV_Val= '\\begin{center}\\begin{tabular}[h]{c} $$$' + q_pV_Val + '$$$ \\\\ $$$\\begin{english} '+ q_pV_Val + '\\end{english}$$$ \\end{tabular}\\end{center}'
tab_q_pV_Val_en= ' \\[ ' + q_pV_Val + '\\] \n'
######## Formeln Ende ######################
###### 1. Section: Beschreibung zum Kalibriergerät ###################
sectionDiscription_1= TextDE ###### Beschreibung aus dem cal-Dokument
sectionDiscription_1_en= TextEN ###### Beschreibung aus dem cal-Dokument
if (sectionDiscription_noyes!= 'yes'):
sectionDiscription_2= " Dies ist die erste von der PTB durchgeführte Kalibrierung."
sectionDiscription_2_en= "This is the previous calibration at PTB."
print(" 1. durchgeführte Kalibrierung")
else:
sectionDiscription_2= " Die von der PTB zuletzt durchgeführten Kalibrierung ist im Kalibrierschein " + last_cert + " beschrieben."
sectionDiscription_2_en= " The previous calibration at PTB had been carried out " + last_cert_year + ' with the calibration mark ' + last_cert + " ."
sectionDiscription_1_en= TextEN ###### Beschreibung aus dem cal-Dokument
sectionDiscription = '\\section{' + sectionDescriptionTitle + '\\linebreak {\\small \\emph{' + sectionDescriptionTitle_en + '}}}\n' + sectionDiscription_1 + sectionDiscription_2 + '\n' + '\\begin{english}' + TextEN + sectionDiscription_2_en + '\\end{english} \n'
sectionDiscription_en = '\\section{' + sectionDescriptionTitle_en +'}\n' + TextEN + sectionDiscription_2_en
print(sectionDiscription, " Discription funktioniert")
####### 2. Section: Procedure ###################################
sectionProcedure1='''Der gemäß DIN 28400, Teil 1, definierte \\(pV\\)-Durchfluss \\(q_{pV}\\) des aus dem Testleck gegen Atmosphäre ausströmenden Gases wird mit dem Primärnormal TL2 des Labors für Vakuummetrologie der PTB bestimmt.
Das Testleck ist dazu an einer kleinen abgeschlossenen Kammer mit veränderbarem Volumen angeflanscht. Die Kammer des Primärnormals und das Testleck sind gemeinsam thermisch von der Umgebung isoliert.
Um den Druck \\(p_{\\text{atm}}\\) (atmosphärischer Luftdruck) in dem Behälter bei einströmendem Gas aus dem Testleck konstant zu halten, wird das Volumen vergrößert.
Der \\(pV\\)-Durchfluss \\(q_{pV}\\) bei der Temperatur \\(T\\) (in K) und der zeitlichen Volumenänderung (\\(\\Delta V/\\Delta t\\)) im Primärnormal ist gegeben durch \n '''
sectionProcedure2=''' Der Druck \\(p_{\\text{atm}}\\) wird mit einem kalibrierten digitalen Manometer gemessen.
Die zeitliche Volumenänderung (\\(\\Delta V/\\Delta t\\)) wird mit Hilfe einer kalibrierten Nadel und einer elektronischen Uhr bestimmt.
Die molare Durchflussrate \\(q_{\\text{mol}}\\) wird nach folgender Beziehung berechnet\n '''
sectionProcedure3=' Die molare Gaskonstante \\(R\\) hat den Wert 8,3145~\\(\\text{Pa}\\)~\\(\\text{m}^3\\)~\\(\\text{mol}^{-1}\\)~\\(\\text{K}^{-1}\\).'
sectionProcedure1_en ='''The gas flow \\(q_{pV}\\) of the leak defined by ISO 3529-1 flowing against atmosphere is measured in the primary test leak standard TL2 of PTB.
The leak is connected to a small chamber of variable size. The chamber of the primary standard and the test leak are thermally isolated from the environment.
The gas of the leak flowing into the chamber causes an increasing pressure, which is compensated by a change of the volume.
The leak rate \\(q_{pV}\\) is calculated from the temporal volume change (\\(\\Delta V/\\Delta t\\)) and the pressure \\(p_{\\text{atm}}\\) (atmospheric pressure) inside the chamber at the temperature \\(T\\) (in K) via '''
sectionProcedure2_en=''' The pressure \\(p_{\\text{atm}}\\) is measured by means of a calibrated digital pressure gauge.
The temporal volume change \\(\\Delta V/\\Delta t\\) is obtained of a calibrated needle and an electronic clock. The molar leak rate \\(q_{\\text{mol}}\\) of the test leak can be calculated by the following equation:'''
sectionProcedure3_en=' The molar gas constant \\(R\\) has the value 8.3145~\\(\\text{Pa}\\)~\\(\\text{m}^3\\)~\\(\\text{mol}^{-1}\\)~\\(\\text{K}^{-1}\\).'
sectionProcedure = '\\section{' + sectionTitelProcedure + '\\linebreak {\\small \\emph{' + sectionTitelProcedure_en + '}}}\n' + sectionProcedure1 + '\\begin{english}' + sectionProcedure1_en + '\\end{english} \n' + q_pV_allg + sectionProcedure2 + '\\begin{english}' + sectionProcedure2_en + '\\end{english} \n' + q_mol_allg + sectionProcedure3 + '\\begin{english}' + sectionProcedure3_en +'\\end{english} \n'
sectionProcedure_en = '\\section{' + sectionTitelProcedure_en + '}\n' + sectionProcedure1_en + q_pV_allg + sectionProcedure2_en + q_mol_allg + sectionProcedure3_en
####### 3. Section: Result ###################################
sectionResult1 = 'Mit dem Testleck wurden insgesamt ' + NoOfMeasurements + ' Leckratenbestimmungen an verschiedenen Tagen bei der Testlecktemperatur \\( \\vartheta_\\text{TL}= \\num{ ' + TemperatureTL + '}\\pm \\SI{0.1}{\\degreeCelsius} \\) durchgeführt.\n Die Atmosphärendrücke lagen zwischen \\(p_{\\text{atm}_1}=(\\num{ ' + PressureAtmosmin + '}\\pm \\SI{0.1})~ \\si{Pa} \\) und \\(p_{\\text{atm}_2}=(\\num{ ' +PressureAtmosmax + '} \\pm \\num{0.1})~ \\si{Pa} \\).\n'
sectionResult2 = 'Daraus kann für den Ort mit einer Temperatur \\(\\vartheta_\\text{Ch}\\) in \\si{\\degreeCelsius}, an dem sich das Testleck befindet, mit \\(T_0 = \\SI{273.15}{\\kelvin}\\), der \\(pV\\)-Durchfluss nach folgender Beziehung berechnet werden.'
sectionResult3 = '\\linebreak Bei einer Temperatur \\( \\vartheta_\\text{Ch}= \\SI{ 23 }{\\degreeCelsius} \\) ergibt sich ein \\(pV\\)-Durchfluss \\(q_{pV}\\) von '
sectionResult4 = 'Die relative Unsicherheit \\(U\\) der angegebenen Leckraten beträgt \\( \\SI{'+ LeakUncertainty +'}{\\percent} \\).'
sectionResult_std = 'Die mittlere molare Leckrate ergab einen Wert von:\n'
sectionResult_std_en = 'The mean leak rate (molar flow) was determined to:\n'
sectionResult_pup_mean = 'Die mittlere molare Leckrate, bei einem relativ zur Atmosphäre eingestellten Druck von \\( p_\\text{up}= \\SI{ ' + PressureUpstream + '}{\\kPa} \\) ergab einen Wert von:\n'
sectionResult_pup_mean_en = 'The mean leak rate (molar flow) for relativ pressure \\( p_\\text{up}= \\SI{ ' + PressureUpstream + '}{\\kPa} \\) at the upstream pressure side was determined to:\n'
sectionResult_pup_int1 = 'Die molare Leckrate, bei einem relativ zur Atmosphäre eingestellten Druck von \\( p_\\text{up}= \\SI{ ' + PressureUpstream + '}{\\kPa} \\) ergab einen Wert von:'
sectionResult_pup_int2 = 'Der Wert ergab sich aus der Interpolation der gemessenen Werte in einem Bereich von \\(p_{\\text{up}_1}=(\\num{ ' + PressureUpstreamMin + '}\\pm \\SI{0.1})~ \\si{kPa} \\) and \\(p_{\\text{up}_2}=(\\num{ ' + PressureUpstreamMax + '}\\pm \\SI{0.1})~ \\si{kPa} \\). Die Unsicherheit des relativ eingestellten Drucks ist \\( \\SI{0.5}{\\percent} \\).'
sectionResult1_en = NoOfMeasurements + ' measurements were carried out on several days at a leak temperature \\( \\vartheta_\\text{TL}= \\num{ ' + TemperatureTL + '}\\pm \\SI{0.1}{\\degreeCelsius} \\) (thermostated) and an atmospheric pressure between \\(p_{\\text{atm}_1}=(\\num{ ' + PressureAtmosmin + ' }\\pm \\SI{0.1})~ \\si{ Pa} \\) and \\(p_{\\text{atm}_2}=(\\num{ ' + PressureAtmosmax + ' } \\pm \\num{0.1})~ \\si{ Pa} \\).'
sectionResult2_en = ' From this the \\(pV\\)-flow can be calculated for a place at a temperature \\(\\vartheta_\\text{Ch}\\) (in \\si{\\degreeCelsius}), where a device under test is mounted and \\(T_0 = \\SI{273.15}{\\kelvin}\\), by the equation '
sectionResult3_en = 'At the temperature \\( \\vartheta_\\text{Ch}= \\SI{ 23 }{\\degreeCelsius} \\) the flow rate is'
sectionResult4_en = 'The relative uncertainty \\(U\\) of the stated leak rate are \\( \\SI{'+ LeakUncertainty +'}{\\percent} \\).'
if res == 1:
print ( "Standartmessung - mit Reservoir" )
sectionResult = '\\section{' + sectionTitelResult + '\\linebreak {\\small \\emph{' + sectionTitelResult_en + '}}}\n' + sectionResult1 + sectionResult_std + '\\begin{english}' + sectionResult1_en + sectionResult_std_en + '\\end{english} ' + tab_q_mol_Val
sectionResult_en = '\\section{' + sectionTitelResult_en + '}\n' + sectionResult1_en + sectionResult_std_en + tab_q_mol_Val_en
else:
if(analy!='mean'):
print ( "Standartmessung - ohne Reservoir" )
sectionResult = '\\section{' + sectionTitelResult + '\\linebreak {\\small \\emph{' + sectionTitelResult_en + '}}}\n'
+ sectionResult1 + sectionResult_pup_mean + q_mol_Val
+ '\\begin{english}' + sectionResult1_en + ' The mean leak rate (molar flow) was determined to:' + q_mol_Val + '\\end{english} \n'
sectionResult = sectionResult + sectionResult2 + '\\begin{english}' + sectionResult2_en + '\\end{english} \n' + q_pV_Val_all + sectionResult3 + '\\begin{english}' + sectionResult3_en + '\\end{english} \n' + tab_q_pV_Val + sectionResult4 + '\\begin{english}' + sectionResult4_en + '\\end{english} \n'
sectionResult_en = sectionResult_en + sectionResult2_en + q_pV_Val_all + sectionResult3_en + tab_q_pV_Val_en + sectionResult4_en
####### 4. Section: Uncertainty ###################################
sectionU1 = 'Angegeben ist die erweiterte Messunsicherheit \\(U\\), die sich aus der Standardmessunsicherheit durch Multiplikation mit dem Erweiterungsfaktor \\(k = 2\\) ergibt. Sie wurde gemäß dem „Guide to the Expression of Uncertainty in Measurement (GUM)“ ermittelt. Der Wert der Messgröße liegt dann im Regelfall mit einer Wahrscheinlichkeit von annähernd \\SI{95}{\\percent} im zugeordneten Überdeckungsintervall.\n '
sectionU1_en = 'The uncertainty \\(U\\) stated is the expanded measurement uncertainty obtained by multiplying the standard measurement uncertainty by the coverage factor \\(k = 2\\). It has been determined in accordance with the “Guide to the Expression of Uncertainty in Measurement (GUM)”. The value of the measurand then normally lies, with a probability of approximately \\SI{95}{\\percent} within the attributed coverage interval.'
sectionU = '\\section{' + sectionTitelUncertainty + '\\linebreak {\\small \\emph{' + sectionTitelUncertainty_en + '}}}\n' + sectionU1 + '\\begin{english}' + sectionU1_en + '\\end{english} \n'
sectionU_en = '\\section{' + sectionTitelUncertainty_en + '}\n' + sectionU1_en
if(lang!='en'):
print("Kalibrierschein in deutsch",lang)
with open(ks,'w', encoding='utf-8') as file:
file.write('\\listfiles\n')
file.write('\\documentclass[de,KK,noCMC]{kalibrierschein}\n ')
file.write(obj)
file.write(manufacturer)
file.write(typ)
file.write(serialNo)
file.write(applicant)
file.write(refNo)
file.write(calibMark)
file.write(calibDate)
file.write('\\byOrder{Dr. M.Bernien}\n')
file.write(examiner)
file.write(certificateDate)
file.write('\\begin{document}\n')
file.write('\\printFirstPage\n')
file.write(sectionDiscription)
file.write(sectionProcedure)
file.write('\\pagebreak ')
file.write(sectionResult)
file.write(sectionU)
file.write('\\pagebreak ')
file.write('\\printLastPage')
file.write('\\end{document}\n')
print("bis hier funktioniert")
else:
print('"Kalibrierschein in ',lang, "en")
with open(ks,'w', encoding='utf-8') as file:
file.write('\\listfiles\n')
file.write('\\documentclass[en,KK,noCMC]{kalibrierschein}\n ')
file.write(obj)
file.write(manufacturer)
file.write(typ)
file.write(serialNo)
file.write(applicant)
file.write(refNo)
file.write(calibMark)
file.write(calibDate)
file.write('\\byOrder{Dr. M.Bernien}\n')
file.write(examiner)
file.write(certificateDate)
file.write('\\begin{document}\n')
file.write('\\printFirstPage\n')
file.write(sectionDiscription_en)
file.write(sectionProcedure_en)
file.write(sectionResult_en)
file.write(sectionU_en)
file.write('\\pagebreak ')
file.write('\\printLastPage')
file.write('\\end{document}\n')
print("bis hier funktioniert")
####################Erstellung des cer-Dokuments ##########################
##### Doukument "cer" wird erstellt#######
MeasurementDateBegin = doc_cal["Calibration"]["Measurement"]["Date"][0]["Value"]
MeasurementDateBegin = MeasurementDateBegin[0]
MeasurementDateEnd = doc_cal["Calibration"]["Measurement"]["Date"][0]["Value"]
MeasurementDateEnd = MeasurementDateEnd[0]
DeviceClass= "TLA"
doc_cer["Certificate"]={"Meta":{"std": ["TL2"],
"id":[id_],
"kind" :[kind],
"gas": [gas],
"lang":lang,
"calibration_type":calibration_type,
"last_cert":last_cert}}
doc_cer["Certificate"]["Titlepage"]={"CertificateDate" :CertificateDate,
"FullYear": "2024",
"ShortYear": "24",
"MeasurementDate": MeasurementDate,
"MeasurementDateBegin": MeasurementDateBegin,
"MeasurementDateEnd": MeasurementDateEnd,
"Certificate": Certificate,
"ReferenceNo": ReferenceNo,
"Customer": {
"Name": Name,
"AddName": AddName,
"Street": Street,
"Town": Town,
"Zipcode": Zipcode,
"Land": Land,
"CountryCode": Land },
"ObjectOfCalibration": ObjectOfCalibration,
"Producer": Producer,
"Type": Type,
"Object": Object,
"Serial": Serial ,
"Examiner": Examiner,
"DeviceClass": DeviceClass,
"ByOrder": ByOrder,
}
doc_cer["Certificate"]["Section"]= [{"Heading": "Description relating to calibration device","Paragraph":sectionDiscription},
{"Heading": "Calibration procedure","Paragraph":sectionProcedure},
{"Heading": "Measurement results","Paragraph":sectionResult},
{"Heading": "Uncertainty of Calibration","Paragraph":sectionU}],
doc_cer["Certificate"]["Formula"]={"NoOfMeasurements": NoOfMeasurements,
"FlowMol": FlowMol,
"FlowpV":FlowpV,
"TemperatureTL": TemperatureTL,
"LeakUncertainty": LeakUncertainty,
"MeasurementDate": MeasurementDate,
"PressureUpstream": PressureUpstream,
"PressureAtmosmin": PressureAtmosmin,
"PressureAtmosmax": PressureAtmosmax,
}
#
#
#
db.save(doc_cer)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment