SiaChlorophyllProjekt == Arbeitsgruppe 1: Markéta Pokorná , Dennis Brüning == '''''Ziel/Aufgabe:''''' Es soll ein Programm entwickelt werden, dass die wöchentlichen Chlorophyll-a-Datafiles (Level 3 Daten) mit 9 km Auflösung aus dem Internet herunterlädt und in einem Verzeichnis speichert. Da dies komprimierte Datafiles sind, soll das Programm ausserdem diese entpacken. ==== Downloaden der Datafiles von der Internetseite http://oceancolor.gsfc.nasa.gov ==== In diesem Programmcode definieren wir eine Funktion, die die spezifischen Datafiles downloadet und im Verzeichnis: ''/users/ifmlinux30a/ifmrs/u242023/SATBILD/data'' speichert. Die Datafiles sollen nicht im Homedirectory gespeichert werden, da die Datenmenge sehr groß ist. ''Erklärungen zum Programmcode:'' * Es wird eine Funktion ''get_data'' definiert, die Datafiles aus dem Internet herunterlädt und sie im Verzeichnis ''data_dir'' speichert. Die in der Funktion benutzte Kennung ''os'' ist ein Modul, dass Unixbefehle in python verwenden kann. * Als nächstes wird im Programm die Internetseite spezifiziert, auf der die wöchentlichen Datafiles bereitgestellt werden, und das Verzeichnis angegeben, in dem die Datafiles gespeichert werden sollen. * Da jeder Dateiname so gewählt ist, dass er das Anfangs- und das Enddatum des gemessenen Zeitraums (eine Woche) enthält, wird eine Schleife definiert, die am ersten Tag des Jahres beginnt und mit einem Schrittintervall von 8 Tagen das ganze Jahr durchläuft. * Ein Beispiel eines Dateinamens ist '''''20040172004024'''''.L3m_8D_CHLO_9.bz2. Das Anfangsdatum ist hier der 17.Januar, oder der 17. Tag des Jahres, der Endpunkt der 24. (also '''17+7=24''') Tag des Jahres. ''Beispiel der heruntergeladenen Dateinamen:'' * A20041052004112.L3m_8D_CHLO_9.bz2 * A20041132004120.L3m_8D_CHLO_9.bz2 * A20041212004128.L3m_8D_CHLO_9.bz2 {{{#!python from scipy import * import os from pylab import * def get_data(name1,data_dir): os.system('wget -P'+data_dir+' '+name1) # Download of datafiles and save in datadirectory (-P) return url='http://oceancolor.gsfc.nasa.gov/cgi/getfile/' data_directory='/users/ifmlinux30a/ifmrs/u242023/SATBILD/data' # Directory path # Count from 1 to 365 in steps of 8 and download one file for every week (7 days) for begin1 in range(1,365,8): datum1='2004%03d'%begin1 end1=begin1+7 datum2='2004%03d'%end1 filename=url+'A'+datum1+datum2+'.L3m_8D_CHLO_9.bz2' # Zipped .hdf data print filename get_data(filename,data_directory) }}} ==== Einlesen der unzipped Dateien ==== Die Dateien waren nach dem Downloaden sogenannte Zipped-Dateien (komprimierte Dateien), die vor der Weiterverarbeitung noch unzipped (ausgepackt) werden müssen. ''Erklärung zum Programmcode:'' Es werden 4 Funktionen definiert: * ''read_CHLO(filename)'' : Diese Funktion wurde von der Arbeitsgruppe 2 übernommen. Sie liest die Chlorophyll-a-Daten (HDF-Format) aus und skaliert sie. * ''hdf_set(filename,z)'' : Mit dieser Funktion können Daten als HDF-File gespeichert werden. * ''unzip_data(name1,data_dir)'' : Diese Funktion entpackt die komprimierten Daten. * ''zip_data(name1,data_dir)'' : Diese Funktion komprimiert die Daten. Ab Zeile 43 finden diese Funktionen Anwendung in der bereits oben beschreibenen Schleife über das ganze Jahr: * Die Datafiles sind bereits heruntergeladen und liegen im ''data_directory''. Sie werden nun entpackt und ihre Dateinamen werden in 3 Teile aufgespalten (Strings). * Die Funktion ''read_CHLO'' wird auf die HDF-Dateien angewandt. Der nachfolgende Programmabschnitt wurde von der Gruppe 2 zur Verfügung gestellt. Hier werden die Daten auf einfache Weise auf das ECOHAM-Modellgebiet (NECS) zugeschnitten und an das Modellgitter angepasst. * diese zugeschnittenen und angepassten Daten werden im HDF-Format unter dem alten Dateinamen mit dem Anhang ''_cut.hdf'' im ''data_directory''-Verzeichnis gespeichert. * Zur Veranschauung wird der bearbeitete Auschnitt graphisch dargestellt. * Zum Schluss wurden die Daten zur Lagerung wieder komprimiert. {{{#!python from scipy import * from pyhdf.SD import * import os,os.path,string import struct#_hdfext from pylab import * def read_CHLO(filename): # Oeffne HDF4-Datei f=SD(filename) # Hole die Attribute (Metadata) attr = f.attributes() # Hole die in der Datei verfuegbaren Datensaetze dsets = f.datasets() # Hole die Daten aus der Datei in ein scipy.array data=array(f.select('l3m_data').get()) # Siehe attr: #'Scaling Equation': ('Base**((Slope*l3m_data) + Intercept) = Parameter value\x00', Base=attr['Base'] Slope=attr['Slope'] Intercept=attr['Intercept'] data[(data==65535).nonzero()]=nan # Skaliere die Daten, um die urspruenglichen Einheiten zu berechnen data=Base**((Slope*data) + Intercept) return data,attr def hdf_set(filename,z): hdfFile=filename f = SD(hdfFile,SDC.WRITE|SDC.CREATE) f.author = 'Lars Kaleschke' v2=f.create('z',SDC.FLOAT32,(z.shape[0],z.shape[1])) v2[:]=z.astype(float32) f.end() return def unzip_data(name1,data_dir): os.system('bunzip2 '+data_dir+name1) return def zip_data(name1,data_dir): os.system('bzip2 '+data_dir+name1) return for begin1 in range(1,365,8): datum1='2004%03d'%begin1 end1=begin1+7 datum2='2004%03d'%end1 filename='A'+datum1+datum2+'.L3m_8D_CHLO_9.bz2' data_directory='/users/ifmlinux30a/ifmrs/u242023/SATBILD/data/' unzip_data(filename,data_directory) a=string.split((os.path.basename(data_directory+filename)),'.') #Aufspaltung des Dateinamenstrings in drei Teile b=a[0]+'.'+a[1] print b img,metadata=read_CHLO(data_directory+b) #Einlesen der Hdf-Daten ##ECOHAM3/4-Gebiet ausschneiden ##ECOHAM3/4 Latitude:47.5833 to 63.9833, Longitude:-15.25 to 14.0833 ecolat1=63.9833 ecolat2=47.5833 ecolon1=-15.25 ecolon2=14.0833 latstep=float(metadata['Latitude Step']) lonstep=float(metadata['Longitude Step']) Nlat=float(metadata['Northernmost Latitude']) Wlon=float(metadata['Westernmost Longitude']) #Koordinaten des Bildausschnitts für die Nordsee lat1=floor((Nlat-ecolat1)/latstep) lat2=ceil((Nlat-ecolat2)/latstep) lon1=floor((abs(Wlon-ecolon1))/lonstep) lon2=ceil((abs(Wlon-ecolon2))/lonstep) img_eco34=img[lat1:lat2,lon1:lon2] #Berechnung der Koordinaten der Satellitenbilder auf den Bildausschnitt img_eco34_modgit=ndimage.zoom(img_eco34,(82./198.,88./353.)) #Anpassung des Satellitenbildausschnittes auf Modellgitter e=a[0]+'.'+a[1]+'_cut.hdf' hdf_set(data_directory+e,img_eco34_modgit) #Speichern des angepassten Satbildes als hdf-Datei figure(1) #Plotten imshow(nan_to_num(img_eco34_modgit),vmin=0,vmax=5) show() zip_data(b,data_directory) #komprimieren der gedownloadeten Dateien c=b+'.bz2' print c }}}