diff --git a/IR_image_tools.py b/IR_image_tools.py
index f1a030d71028c458c1c3c76ac47cf172743af125..2ae74451b2854926125dfe1bb55b7e4db7f303f4 100644
--- a/IR_image_tools.py
+++ b/IR_image_tools.py
@@ -63,7 +63,7 @@ def get_OP_by_time(time_ns=None, shot_no=None, program_str=None):
             return None
 
 
-def bestimmtheitsmaß_general(data,fit):
+def bestimmtheitsmass_general(data,fit):
     R=0
     if len(fit)==len(data):
         mittel=np.sum(data)/len(data)
@@ -113,7 +113,7 @@ def check_coldframe(coldframe,references=None,threshold=0.5,plot_it=False):
     for i_dat in range(len(datasets)):
         dat=datasets[i_dat]
         reference=references[i_dat]
-        bestimmtheit.append(bestimmtheitsmaß_general(dat,reference))
+        bestimmtheit.append(bestimmtheitsmass_general(dat,reference))
         if plot_it:            
             plt.plot(dat,label='data')
             plt.plot(reference,label='reference')
@@ -168,8 +168,8 @@ def read_bad_pixels_from_file(port, shot_no=None, program=None):
         
     port_name = 'AEF{0}'.format(port)
     bad_pixel_file = 'badpixel_{0}.bpx'.format(portcamdict[OP][port_name][6:])
-    data = np.genfromtxt(IRCAMBadPixels_path+bad_pixel_file, dtype=int)
     try:
+        data = np.genfromtxt(IRCAMBadPixels_path+bad_pixel_file, dtype=int)    
         bad_pixle_list = list(zip(data[:,1], data[:,0]))
     except:
         bad_pixle_list=[]
@@ -220,8 +220,10 @@ def correct_images(images,badpixels):
     if type(badpixels)!=int:
         if type(images) == list:
             # return corrected images also as list of 2D arrays
-            images = restore_bad_pixels(images, np.invert(badpixels==1))#.astype(np.float32)
-            images = list(images)
+#            images = restore_bad_pixels(images, np.invert(badpixels==1))#.astype(np.float32)
+#            images = list(images)
+            for i in range(len(images)):
+                images[i]=restore_bad_pixels(images[i], np.invert(badpixels==1))
         else:
             # keep shape
             images = restore_bad_pixels(images, np.invert(badpixels==1)).astype(np.float32)
diff --git a/Upload_Day_IRdata.py b/Upload_Day_IRdata.py
index da012189214ae7dc705a43946ad1eaceab620af8..f28e911ca95152b9914ed31055a461d2f50c1c12 100644
--- a/Upload_Day_IRdata.py
+++ b/Upload_Day_IRdata.py
@@ -12,21 +12,22 @@ import numpy as np
 import datetime
 import sys
 from time import sleep
+from os.path import join
 #from getfoldernames import Searchdatalocation as gfn
 
 #%% set global parameter
 
-is_local_test = True    # local test on one IRcam PC (not central PC)
+### default old settings, will be overrided by the loaded config file!!! ###
+local= True    # local test on one IRcam PC (not central PC)
 active_PC = [0]         # selection of the following camera PCs to loop over
 delayupload=True
 startuploadtime="20:00:00"
 reupload=False
 reason=""
 retry=2
-
+port="AEF10"
 singleupload=False#True#False
 singlelist=[]
-
 raw_parlog=True
 raw_data=True#False#True
 raw1=True#False#True#False#True
@@ -36,8 +37,10 @@ background=True#False#True
 nuc_parlog=True#False
 nuc=True
 metastream=True
-
 dates=[[2017,11,9]]
+temperature=False
+only_upload_lattest=False
+use_today=False
 
 ports = ['AEF10', 'AEF11', 
          'AEF20', 'AEF21', 
@@ -59,9 +62,35 @@ pc_list = ['Pc-e4-qrt-7', 'Pc-e4-qrt-2',
            'Pc-dia-ws-16', 'Pc-e4-qrt-6', 
            'Pc-dia-ws-17', 'Pc-dia-ws-18', 
            'Pc-e4-qrt-5', 'Pc-e4-qrt-1']
-
+try:
+    cFile=open("upload_config")
+    for line in cFile:
+        if line[0:3]!="###":
+            vars()[line.split("=")[0]]=eval(line.split("=")[1].split("\n")[0])
+    cFile.close()
+    active_PC=[ports.index(port)]
+    Tup[ports.index(port)]=temperature
+    if use_today:
+        dummy=datetime.datetime.now()
+        dates=[[dummy.year,dummy.month,dummy.day]]
+except Exception as E:
+    raise Exception("Config file was not loaded properly",E)
 toff = 0 #delay time of the programm for the raw stuff in ms
 
+
+def findthelatestfilename(Rawdatapath):
+    '''
+    find the latest modified file name for easy upload.
+    @Rawdatapath: the path to search from, e.g: 'R:\\2018.06.07'.
+    
+    return the latest modified file name in string.
+    '''
+    filelist = os.listdir(Rawdatapath)
+    timearray = [os.path.getmtime(join(Rawdatapath, i)) for i in filelist]
+    maxtimestampindex = np.argmax(timearray)
+    latestfilename = filelist[maxtimestampindex]
+    return latestfilename
+
 #create upload log file:
 
 class Tee(object):
@@ -107,7 +136,7 @@ for date in dates:
         calibdatapath = rawdatapath
         tempdatapath  = "\\\\{0:s}\\t\\{1[0]:4d}.{1[1]:02d}.{1[2]:02d}"
         
-    if is_local_test:
+    if local:
         rawdatapath   = "R:\\{1[0]:4d}.{1[1]:02d}.{1[2]:02d}"
         calibdatapath = rawdatapath
         tempdatapath  = "T:\\{1[0]:4d}.{1[1]:02d}.{1[2]:02d}"
@@ -118,7 +147,9 @@ for date in dates:
         raw_data=False
         
     for i in active_PC:
-        
+        if only_upload_lattest:
+            single_upload=True
+            singlelist = [findthelatestfilename(rawdatapath.format(pc_list[i],date))]
         port = int(ports[i].split('AEF')[1])    
         path = rawdatapath.format(pc_list[i],date)
         print(datetime.datetime.now(),"Starting Upload for "+ports[i],date)
@@ -152,20 +183,24 @@ for date in dates:
                 if len(filelist)>0:# check for empty folder!
                     for file in filelist:
                         dummy = file.split("_")
-                        if dummy[1]=='background':
-                            blist[dummy[7]] = file
-                        elif dummy[1]=='nuc':
-                            if dummy[2]=='cold':
-                                clist[dummy[8]] = file
-                            elif dummy[2]=='gain':    
-                                glist[dummy[8]] = file
-                            elif dummy[2]=='offset':
-                                olist[dummy[8]] = file 
-                        elif dummy[1]=='raw':
-                            rlist[dummy[3]] = file
-                        else:
-                            print("unexpected file in the folder!")
-                            foutf.write(datetime.datetime.now(),"unexpected file in the folder",prog_time,"\n")
+                        if date[0]>=2018:
+                            if dummy[4]=='raw' or dummy[4]=='cal':
+                                rlist[dummy[1]]=file
+                        else:                        
+                            if dummy[1]=='background':
+                                blist[dummy[7]] = file
+                            elif dummy[1]=='nuc':
+                                if dummy[2]=='cold':
+                                    clist[dummy[8]] = file
+                                elif dummy[2]=='gain':    
+                                    glist[dummy[8]] = file
+                                elif dummy[2]=='offset':
+                                    olist[dummy[8]] = file 
+                            elif dummy[1]=='raw':
+                                rlist[dummy[3]] = file
+                            else:
+                                print("unexpected file in the folder!")
+                                foutf.write(datetime.datetime.now(),"unexpected file in the folder",prog_time,"\n")
                     print(datetime.datetime.now(),"   Start NUC upload")
                     # upload of NUC files, background files
                     if cameras[i]=="IRCAM":
@@ -281,7 +316,8 @@ for date in dates:
         				'pos_left':int(np.asarray(attri1['ROI_x'])[0]),
         				'pos_top':int(np.asarray(attri1['ROI_y'])[0]),
         				'bitdepth': int(np.asarray(attri1['bitdepth'])[0])
-        			}
+                    }
+
         	#        tmeta1={'divertortemperature_K':np.asarray(attri1['divertor_temp_K'])[0],
         	#                'timestamp':np.asarray(attri1['timestamp'])[0]}
                     time1=np.asarray(hf1['timestamps'])
@@ -298,8 +334,8 @@ for date in dates:
         				'pos_left':int(np.asarray(attri2['ROI_x'])[0]),
         				'pos_top':int(np.asarray(attri2['ROI_y'])[0]),
         				'bitdepth': int(np.asarray(attri2['bitdepth'])[0])
-        			}
-        			
+                    }
+                    
         	#        tmeta2={'divertortemperature_K':np.asarray(attri2['divertor_temp_K'])[0],
         	#                'timestamp':np.asarray(attri2['timestamp'])[0]}
                     time2=np.asarray(hf2['timestamps'])
@@ -311,36 +347,100 @@ for date in dates:
                         metadata1['cameraname']= 'IRCam_Caleo768kL'
                         metadata2['cameraname']= 'IRCam_Caleo768kL'
                         metadata1['purpose']='NUC+background'
-                        metadata2['purpose']='experiment'
+                        metadata2['purpose']='experiment'                        
         				#['ROI_h', 'ROI_w', 'ROI_x', 'ROI_y', 'Size', 
         				  #'bitdepth', 'camera_temp_C', 'divertor_temp_K', 'frame_number', 
         				  #'frame_rate', 'integration_time_us', 'sensor_temp_C', 'timestamp']            
                     else:
-                        metadata1['cameraname']= 'INFRATEC_IMAGEIR9300'
-                        metadata1['filter']=int(np.asarray(attri1['filter'])[0])
-                        #metadata1['multi_exposure']=np.asarray(attri1['multi_exposure'])[0]
-                        metadata2['cameraname']= 'INFRATEC_IMAGEIR9300'
-                        metadata2['filter']=int(np.asarray(attri2['filter'])[0])
+                        metadata1['cameraname']= 'INFRATEC_IMAGEIR9300'                                                
+                        metadata2['cameraname']= 'INFRATEC_IMAGEIR9300'                       
                         metadata1['purpose']='background'
                         metadata2['purpose']='experiment'
                         #metadata2['multi_exposure']=np.asarray(attri2['multi_exposure'])[0]
+                        #metadata1['multi_exposure']=np.asarray(attri1['multi_exposure'])[0]
+                    if date[0]>=2018:
+                        metadata1['software_version']=hf1['images'].attrs['software_version'].decode("UTF-8")
+                        metadata1['filter']=int(np.asarray(attri1['filter'])[0])
+                        metadata1['view_flip_h']=bool(np.asarray(attri1['view_flip_h'])[0])
+                        metadata1['view_flip_v']=bool(np.asarray(attri1['view_flip_v'])[0])
+                        metadata2['software_version']=hf2['images'].attrs['software_version'].decode("UTF-8")
+                        metadata2['filter']=int(np.asarray(attri2['filter'])[0])
+                        metadata2['view_flip_h']=bool(np.asarray(attri2['view_flip_h'])[0])
+                        metadata2['view_flip_v']=bool(np.asarray(attri2['view_flip_v'])[0])
+                        metadata1['cameraname']= hf1['images'].attrs['camera'].decode("UTF-8")                                             
+                        metadata2['cameraname']= hf2['images'].attrs['camera'].decode("UTF-8")                    
+                        framenumber1=np.asarray(attri1['frame_number'])
+                        framenumber2=np.asarray(attri2['frame_number'])
+                        try:
+                            ftype1=np.asarray(attri1['frame_type'])
+                            frametype1=[]
+                            for ele in ftype1:
+                                if ele == "nuc":
+                                    frametype1.append(0)
+                                elif ele == "background":
+                                    frametype1.append(1)
+                                elif ele == "discharge":
+                                    frametype1.append(2)
+                                else:
+                                    frametype1.append(-1)
+                        except:                                
+                            frametype1=np.zeros((len(framenumber1)))-1
+                        try:
+                            ftype2=np.asarray(attri2['frame_type'])
+                            frametype2=[]
+                            for ele in ftype2:
+                                if ele == "nuc":
+                                    frametype2.append(0)
+                                elif ele == "background":
+                                    frametype2.append(1)
+                                elif ele == "discharge":
+                                    frametype2.append(2)
+                                else:
+                                    frametype2.append(-1)
+                        except:
+                            frametype2=np.zeros((len(framenumber2)))-1
+                        channel_names=["sensortemperature","cameratemperature","framerate","exposuretime","framenumber","frametype"]
+                        channel_units=["oC","oC",'Hz','us','none','none']
+                        channel_values1=[sensor1, chip1,framerate1,expo1,framenumber1,frametype1]
+                        channel_values2=[sensor2, chip2,framerate2,expo2,framenumber2,frametype2]
+                        comment_meta1="frametype: 0 cold, 1 background, 2 discharge, -1 unknown"
+                        comment_meta2="frametype: 0 cold, 1 background, 2 discharge, -1 unknown"
+                        triggered=np.asarray(attri2['triggered'])
+                        trig_index=np.where(triggered==1)
+                        if len(trig_index[0])>0:
+                            trig_index=min(trig_index[0])
+                            toff=(time2[0]-time2[trig_index])/1e6
+                        else:
+                            print("triggered frame was not found! Assumeing that frame 0 is the t1 frame")
+                            toff=0
+                        print(datetime.datetime.now(),"   regenerate timevectors")
+                        time1=IRup.regenerate_timevector(time1,0,t2,0)
+                        time2=IRup.regenerate_timevector(time2,1,t2,toff)
+                    else:
+                        channel_names=["sensortemperature","cameratemperature","framerate","exposuretime"]
+                        channel_units=["oC","oC",'Hz','us']
+                        channel_values1=[sensor1, chip1,framerate1,expo1]
+                        channel_values2=[sensor2, chip2,framerate2,expo2]
+                        comment_meta1=""
+                        comment_meta2=""
+                        print(datetime.datetime.now(),"   regenerate timevectors")
+                        time1=IRup.regenerate_timevector(time1,0,t2,0)
+                        time2=IRup.regenerate_timevector(time2,[1,6],t2,0)
                     hf1.close()
                     del attri1
                     hf2.close()            
-                    del attri2			
-                    print(datetime.datetime.now(),"   regenerate timevectors")
-                    time1=IRup.regenerate_timevector(time1,0,t2,0)
-                    time2=IRup.regenerate_timevector(time2,[1,6],t2,0)
+                    del attri2	                        
+                    
                     print(datetime.datetime.now(),"   Upload Meta Stream(s)")
                     if metastream:
                         try:
-                            IRup.upload_meta_stream(cameras[i],port,np.asarray(time1),sensor1,chip1,framerate1,expo1,newversion=newversion,reason=reason)
+                            IRup.upload_meta_stream_V2(cameras[i],port,np.asarray(time1),channel_names,channel_units,channel_values1,newversion=newversion,reason=reason)
                         except Exception as E:
                             print(E)
                             foutf.write(datetime.datetime.now(),"metastream 1 upload failed",E,"\n")
                         del sensor1, chip1,framerate1,expo1
                         try:
-                            IRup.upload_meta_stream(cameras[i],port,np.asarray(time2),sensor2,chip2,framerate2,expo2)
+                            IRup.upload_meta_stream_V2(cameras[i],port,np.asarray(time2),channel_names,channel_units,channel_values2,newversion=newversion,reason=reason)
                         except Exception as E:
                             print(E)  
                             foutf.write(datetime.datetime.now(),"metastream 2 upload failed",E,"\n")
@@ -389,7 +489,7 @@ for date in dates:
                         print("raw upload deactivated")
                         foutf.write(datetime.datetime.now(),"raw upload deactivated","\n")
                 else:#folder is empty
-                	print("no files in",prog_time)
+                    print("no files in",prog_time)
                 reupload=False
             except Exception as E:
                 print("Cannot Upload Data for folder "+str(prog_time))
diff --git a/downloadversionIRdata.py b/downloadversionIRdata.py
index 97b5d84af68328ae20d8c1f262c2f5a880c0bfde..3840e81e82f6fc7dbc0f471dfdff0b7a449e3853 100644
--- a/downloadversionIRdata.py
+++ b/downloadversionIRdata.py
@@ -165,8 +165,8 @@ def download_LUT(port,time,exposure=0,emissivity=0,camera_filter=0,version=0, ve
         raise Exception
     if version==0:
         version=get_latest_version(stream+"DATASTREAM")
-        if verbose>0:
-            print("LUT V"+str(version)+" is used")
+    if verbose>0:
+        print("LUT V"+str(version)+" is used")
     #time=int(fu.TimeToNs([2017,9,26],[8,0,0,0]))
     LUTpar=read_restdb_old(larchivepath+"PARLOG/V"+str(version)+"/_signal.json?from="+str(time-10)+"&upto="+str(time+20))
     if LUTpar[0]:
@@ -1528,7 +1528,11 @@ def make_FOV_mask(port):
     y0=points[1]
     x0=points[0]
     r1=points[2]
-    da,time,back=download_background_by_program(port,"20171109.045",50)
+    if port==50:
+        exposure=50
+    else:
+        exposure=9
+    da,time,back=download_background_by_program(port,"20171109.045",exposure)
 #    fig = plt.figure()
 #    plt.imshow(back,vmin=np.average(back)-200,vmax=np.average(back)+500)
 #    inner_circle = mlt.patches.Circle((x0,y0), r1,color = 'r', fill = False)
@@ -1611,13 +1615,16 @@ def estimate_offset(port,program,plot_it=False):
     
 if __name__=='__main__':
     print("local function calling")                    
-    port=11
+    port=20
 #    prog="20171108.015"
     prog="20171109.021"
 #    prog="20171025.030"
 #    prog="20171012.035"
     prog="20171005.024"
-    status,time,images,valid=get_temp_from_raw_by_program(port,prog,time_s=[0,1],emi=0.82,T_version=2,version=0,threads=1,give_ERROR=False,use_firstframe_as_background=False)
+    prog="20171109.056"
+    status,time,images,valid=get_temp_from_raw_by_program(port,prog,time_s=[0,6],emi=0.82,T_version=2,version=0,threads=4,give_ERROR=False,use_firstframe_as_background=False)
+#    status,time,images=download_raw_images_by_program_via_png(port,prog,time_s=6,threads=4,verbose=10)
+#    print(len(images))
 #    import h5py as h5
 #    szene=h5.File("X:\\E4 Diagnostics\\QIR\Calibrations\\scene_models\\AEF"+str(port)+"\\AEF"+str(port)+"_scene_model.h5")
 #    Xloc=np.asarray(szene['x'])
@@ -1634,5 +1641,4 @@ if __name__=='__main__':
     plt.imshow(images[-1],vmin=300,vmax=600,cmap=exJet)
     cb=plt.colorbar()
     cb.set_label("temperature K", rotation=270,labelpad=26,fontsize=26)
-    cb.ax.tick_params(labelsize=26)
-          
+    cb.ax.tick_params(labelsize=26)
\ No newline at end of file
diff --git a/upload_config b/upload_config
new file mode 100644
index 0000000000000000000000000000000000000000..a79cacfbcb9366a997943af179e6d8cadf298bd2
--- /dev/null
+++ b/upload_config
@@ -0,0 +1,27 @@
+### specifications ###
+port="AEF10"
+local=True
+delayupload=True
+starttime="20:00:00"
+single_upload=False
+use_today=False
+upload_only_lattest=False
+dates=[[2017,11,9]]
+singlelist=[]
+### settings ###
+delete_Files=False
+rawdata=True
+raw1=True
+raw2=True
+raw_parlog=True
+back_parlog=False
+background=False
+nuc_parlog=False
+nuc=False
+metastream=True
+temperature=False
+retry=2
+archivedb=False
+### versioning ###
+reupload=False
+reason=""
diff --git a/uploadingversionIRdata.py b/uploadingversionIRdata.py
index 8f71343f8ce87371a9bfa38471f31690d0e7ce14..c9074adc813274f6d86a9955db2c88f34b4c7430 100644
--- a/uploadingversionIRdata.py
+++ b/uploadingversionIRdata.py
@@ -285,7 +285,11 @@ def TimeToNs(date,time):
 ### START of the UPLOAD ROUTINES ###
 ####################################
 def upload_meta_stream(camera,portnum,time,sensortemp,cameratemp,framerate,exposuretime,comment="",newversion=False,reason=""):
-    group="QRT_"+camera#+"_TEST"
+    """    
+    old: sensortemp,cameratemp,framerate,exposuretime
+    new: channels with names, units and values
+    """
+    group="QRT_IRCAM"#+camera#+"_TEST"
     datastream_name="AEF"+str(portnum)+"_meta"
     url="http://archive-webapi.ipp-hgw.mpg.de/Test/raw/"+project+"/"+group+"/"+datastream_name
     if newversion:        
@@ -320,6 +324,45 @@ def upload_meta_stream(camera,portnum,time,sensortemp,cameratemp,framerate,expos
              "dimensions":time.tolist()
             }
     upload_fulldataset(url,parobj,dataobj,version)
+
+def upload_meta_stream_V2(camera,portnum,time,channel_names,channel_units,channel_values,comment="",newversion=False,reason=""):
+    """    
+    old: sensortemp,cameratemp,framerate,exposuretime
+    new: channels with names, units and values
+    """
+    if len(time)==len(channel_values[0]) and len(channel_names)==len(channel_units):
+        group="QRT_IRCAM"#+camera#+"_TEST"
+        datastream_name="AEF"+str(portnum)+"_meta"
+        url="http://archive-webapi.ipp-hgw.mpg.de/Test/raw/"+project+"/"+group+"/"+datastream_name
+        if newversion:        
+            archive_create_stream_version(url, reason, False, "n/a", "n/a" ) 
+            ver=get_latest_version("Test/raw/"+project+"/"+group+"/"+datastream_name+"_PARLOG")
+            version=ver
+        else:
+            ver=get_latest_version("Test/raw/"+project+"/"+group+"/"+datastream_name+"_PARLOG")
+            if ver==None:
+                reason="Versioning of Data"
+                archive_create_stream_version(url, reason, False, "n/a", "n/a" )
+                version=1
+            else:
+                version=ver
+        chanDesc={}
+        for i in range(len(channel_names)):
+            chanDesc["["+str(i)+"]"]={'name':channel_names[i],'physicalQuantity':{'type':channel_units[i]},'active':1}
+        parobj={"label":"parms",
+                "description":"metadata informations for "+camera+" in AEF"+str(portnum),
+                "values":[{"chanDescs":chanDesc,'comment':comment}],
+                "dimensions":[time[0],time[-1]]
+                }
+        channels=[]
+        for vals in channel_values:
+            channels.append(vals)
+        channels=np.asarray(channels)
+        dataobj={"datatype":"float",
+                 "values":channels.tolist(),
+                 "dimensions":time.tolist()
+                }
+        upload_fulldataset(url,parobj,dataobj,version)
     
 def upload_raw_data(camera,portnum,time,images,metadata={},comment="",newversion=False,reason=""):
     """
@@ -332,7 +375,7 @@ def upload_raw_data(camera,portnum,time,images,metadata={},comment="",newversion
     (bool)          newversion: defines whether a new version is needed    
     (str)           reason:     reason for the new version
     """
-    group="QRT_"+camera#+"_TEST" # test part will be removed in final version
+    group="QRT_IRCAM"#+camera#+"_TEST" # test part will be removed in final version
     datastream_name="AEF"+str(portnum)+"_raw"#_TEST_001"
     chanDesc=[{'name':'raw','physicalQuantity':{'type':'none'},'active':1}]
     #adjusted to metadataforcurrentvideo
@@ -384,6 +427,7 @@ def regenerate_timevector(time,reftrig=1,tref=0,toff=0):
     else:
         print("Program for this reference timestamp not found, cannot generate new timevector")
         return np.asarray(time)
+
     
 def upload_raw_data_from_H5(camera,portnum,time,h5file,metadata={},comment="",parlog=True,rawdata=True,newversion=False,reason=""):
     """
@@ -396,7 +440,7 @@ def upload_raw_data_from_H5(camera,portnum,time,h5file,metadata={},comment="",pa
     (str)           reason:     reason for the new version
     """
     #camera="IRCAM"
-    group="QRT_"+camera#+"_TEST" # test part will be removed in final version
+    group="QRT_IRCAM"#+camera#+"_TEST" # test part will be removed in final version
     datastream_name="AEF"+str(portnum)+"_raw"#_TEST7"
     #not tested#
     chanDesc=[{'name':'raw','physicalQuantity':{'type':'none'},'active':1}]
@@ -460,7 +504,7 @@ def upload_temperaure_data(camera,portnum,images,time,metadata={},comment="",new
     upload_images(camera,portnum,images,time,"temperature","K",parlog,newversion=False,reason="")
    
 def upload_Background_frame(camera,portnum,time,texp_filter,background,parlog=True,data=True,newversion=False,reason=""): 
-    group="QRT_"+camera                   # test part will be removed in final version
+    group="QRT_IRCAM"#+camera                   # test part will be removed in final version
 #    group="QRT_IRCAM_TEST"                   # test part will be removed in final version
     name=["background"]
     datastream_name="AEF"+str(portnum)+"_background"     # test part will be removed in final version
@@ -517,7 +561,7 @@ def upload_NUC_ref(camera,portnum,time,texp_filter,gain,offset,cold,bad,gain_e=[
     (str)           reason:     reason for the new version
     """
     #camera="IRCAM" #will be removed in final version
-    group="QRT_"+camera#+"_TEST"                   # test part will be removed in final version
+    group="QRT_IRCAM"#+camera#+"_TEST"                   # test part will be removed in final version
     name=["NUC"]
     datastream_name="AEF"+str(portnum)+"_NUC"     # test part will be removed in final version
     if np.shape(gain)==np.shape(bad):
@@ -588,7 +632,7 @@ def upload_LUT_tables(LUTs,LUTref,camera,portnum,time,newversion=False,reason=""
     (str)           reason:     reason for the new version
     """
     #camera="IRCAM" #will be removed in final version
-    group="QRT_"+camera#+"_TEST" # test part will be removed in final version
+    group="QRT_IRCAM"#+camera#+"_TEST" # test part will be removed in final version
     name=["LUT"]
     datastream_name="AEF"+str(portnum)+"_LUT"
     #test of dataformat
@@ -649,21 +693,21 @@ def upload_hot_cold_reference(port,path):
     """
     
     """
-    if port==50:
-        camera="INFRATEC"
-    else:
-        camera="IRCAM"
-    group="QRT_"+camera#+"_TEST" # test part will be removed in final version
+#    if port==50:
+#        camera="INFRATEC"
+#    else:
+    camera="IRCAM"
+    group="QRT_IRCAM"#+camera#+"_TEST" # test part will be removed in final version
     name=["raw"]
     datastream_name="AEF"+str(port)+"_raw"  
     print("not ready")
    
 def upload_scene_model(port,time_ns,path="\\\\sv-e4-fs-1\\E4-Mitarbeiter\\E4 Diagnostics\\QIR\\Calibrations\\scene_models",newversion=False,reason=""):
-    if port==50:
-        camera="INFRATEC"
-    else:
-        camera="IRCAM"
-    group="QRT_"+camera#+"_TEST" # test part will be removed in final version
+#    if port==50:
+#        camera="INFRATEC"
+#    else:
+    camera="IRCAM"
+    group="QRT_IRCAM"#+camera#+"_TEST" # test part will be removed in final version
     name=["scene_model"]
     datastream_name="AEF"+str(port)+"_scene_model"    
     url="http://archive-webapi.ipp-hgw.mpg.de/Test/raw/"+project+"/"+group+"/"+datastream_name    
@@ -700,6 +744,27 @@ def upload_scene_model(port,time_ns,path="\\\\sv-e4-fs-1\\E4-Mitarbeiter\\E4 Dia
             }    
     upload_Parlog(url,parobj,version=version)  
     upload_images(camera,port,framelist,time_ns_list,"scene_model",version)
+
+
+#def upload_NUC_ref():
+#    """
+#    
+#    """
+#    print("not ready")
+
+def download_LUT_tables(camera,port,time,texp=0,emissivity=0,Filter=0):
+    """
+    (str)           camera:     string of cameraname "IRCAM"  or "INFRATEC", is used for the path
+    (numpy.array)   time:       time vector in uint64 ns of length t
+    (bool)          newversion: defines whether a new version is needed    
+    (int)           portnum:    portnumber as int, example: 10 or 11 etc.
+    in case of texp=0 and emissivity=0 it will give back all LUTs
+    """
+    
+    print("not ready")
+    return 0
+    
+
     
 def upload_Parlog(url,parobj,versionnumber=0):
 #    print('>upload_Parlog: json of parlog')
@@ -734,24 +799,24 @@ def upload_fulldataset(url,parlog,data,versionnumber,bparlog=True,bdata=True):
     
 ### from here on subfunctions    
     
-def upload_images(camera,portnum,images,time,typ,version):
+def upload_images(camera,portnum,images,time,typ,newversion=False,reason=""):
     """
     upload_images(camera,portnum,images,time,metadata={},newversion=False,reason="")
     
     """
     #camera="IRCAM" #will be removed in final version
-    group="QRT_"+camera#+"_TEST" # test part will be removed in final version
+    group="QRT_IRCAM"#+camera#+"_TEST" # test part will be removed in final version
 #    names=[typ]
     datastream_name="AEF"+str(portnum)+"_"+typ#+"_TEST001"
     
     #url="http://archive-webapi.ipp-hgw.mpg.de/Test/raw/"+project+"/"+group+"/"+datastream_name
-#    if newversion:
-#        print('no version control of HDF5 files yet!')
+    if newversion:
+        print('no version control of HDF5 files yet!')
 #        archive_create_stream_version(url, reason, False, "n/a", "n/a" )     
     try:
 #        archive.write_signals(images,time,group,project,names, datastream_name,units,metadata,2,True)
         tmp=writeH5(datastream_name,images,time)
-        uploadH5_Versioning(group,datastream_name,tmp,version,True)
+        uploadH5(group,datastream_name,tmp,True)
     except Exception as E:
         print("Upload Failed")
         print(E)
@@ -857,6 +922,8 @@ def writeH5_from_File(stream,filename,key,dimof,idx=None):
     """
 #    stream = path.stream
 #    dtype = str(data.dtype)
+    import struct
+    get_P=8*struct.calcsize("P")
     filesize=os.stat(filename).st_size
     f5=h5reader.File(filename,'r')
     if filesize<4000000000:        
@@ -892,8 +959,13 @@ def writeH5_from_File(stream,filename,key,dimof,idx=None):
                 g = f.create_group('data')  # requires [row,col,time]
                 g.create_dataset('timestamps', data=list(times[i]), dtype='uint64')#,compression="gzip")
                 dset=g.create_dataset(stream,shape=(shapi[0],shapi[1],limits[i+1]-limits[i]),dtype='uint16',chunks=(shapi[0],shapi[1],1))#,compression='gzip')
-                for n in range(limits[i+1]-limits[i]):
-                    dset[:,:,n]=f5[key][:,:,limits[i]+n]
+                if get_P<64:#check python version of 32 or 64 bit to decide which method should be used                
+                    for n in range(limits[i+1]-limits[i]):
+                        dset[:,:,n]=f5[key][:,:,limits[i]+n]
+                else:
+                    dummy=np.zeros((shapi[0],shapi[1],limits[i+1]-limits[i]))
+                    f5[key].read_direct(dummy,np.s_[limits[i]:limits[i+1]])
+                    dset.write_direct(dummy)
             tmpfiles.append(tmpfile)
         return tmpfiles