diff --git a/API-V2-elab.py b/API-V2-elab.py
new file mode 100644
index 0000000000000000000000000000000000000000..e8afb6b087718cdb3a998b28bd22ee460ec5260c
--- /dev/null
+++ b/API-V2-elab.py
@@ -0,0 +1,232 @@
+# -*- 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)
+
+
+
+
+
+
diff --git a/file-to-couchdb_tl2.py b/file-to-couchdb_tl2.py
new file mode 100644
index 0000000000000000000000000000000000000000..d2c28b7cefa270ca7b53a5c2448e4cc786d3d52e
--- /dev/null
+++ b/file-to-couchdb_tl2.py
@@ -0,0 +1,146 @@
+# -*- 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)
+
+
diff --git a/writeLaTeX-ks-TL2.py b/writeLaTeX-ks-TL2.py
new file mode 100644
index 0000000000000000000000000000000000000000..1b7cab9be3a9849ab9fb5129046a5554d7b8eba2
--- /dev/null
+++ b/writeLaTeX-ks-TL2.py
@@ -0,0 +1,484 @@
+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