source: TI02-CSML/trunk/Scanner/csmllibs/csmltime.py @ 898

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI02-CSML/trunk/Scanner/csmllibs/csmltime.py@898
Revision 898, 7.2 KB checked in by domlowe, 14 years ago (diff)

cleaned up excess print statements

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1#!/usr/bin/env python
2
3#**************************************************************************************
4#csmltime.py
5#contains time related functions for creating CSML
6#v0.5 split off 11th November 2005
7#v0.51 updated to use datainterface 6th Dec 05
8#!!!!!!!!!!!!!!! NEEDS TIDYING UP!!!!!!!!!!!!!!!!!!!!!!!!!!!
9#Dominic Lowe, BADC
10#**************************************************************************************
11
12#import cdms
13import csmllibs
14import datetime
15import sys
16
17def createRefsys(csmldoc, dataset_element):
18        #opens <ReferenceSystemDefinitions> tag
19        RefSys_element=csmldoc.createElement("ReferenceSystemDefinitions")
20        RefSys_element.setAttribute('gml:id', 'RefSysDefs')
21        return csmldoc, dataset_element, RefSys_element
22
23def createTimeCoordSystem(csmldoc, dataset_element, RefSys_element,ffmap):
24        repFiles = ffmap.getRepresentativeFiles()
25        i =0
26        for  file in repFiles:
27                i = i+1
28                filename= file.getRepresentativeFileName()
29                DI = csmllibs.csmldataiface.DataInterface()
30                DI = DI.getUnknownInterfaceType(filename)
31                DI.openFile(filename)
32                axes=DI.getListOfAxes()
33                timedim = 'undetermined'
34                if len(axes)==1:
35                        #then this must be the time axis
36                        timedim=axes[0]
37                TCS_element = csmldoc.createElement('TimeCoordinateSystem')
38                TCS_element.setAttribute('gml:id', 'RefSys' +str(i))
39                gml_description_element =csmldoc.createElement('gml:description')
40                gml_name_element =csmldoc.createElement('gml:name')
41                gml_originPosition_element =csmldoc.createElement('gml:originPosition')
42                gml_interval_element =csmldoc.createElement('gml:interval')
43                       
44                date=GetOriginPosition(timedim)
45                print 'date:'
46                print str(date)
47               
48                TCS_element.appendChild(gml_description_element)
49                TCS_element.appendChild(csmldoc.createTextNode(date))
50                TCS_element.appendChild(gml_name_element)
51                TCS_element.appendChild(gml_originPosition_element)
52                TCS_element.appendChild(gml_interval_element)
53                RefSys_element.appendChild(TCS_element)
54                DI.closeFile()
55       
56        return csmldoc, dataset_element, RefSys_element
57
58def closeRefSys(csmldoc,dataset_element, RefSys_element):
59        #closes </ReferenceSystemDefinitions> tag
60        dataset_element.appendChild(RefSys_element)
61        return csmldoc, dataset_element
62
63
64def udunitsTime(daysSince, referenceDate):
65        #**************************************************************************************
66        #Creates UD Units compliant time/date strings from days/hours since and referenceDate/time
67        #**************************************************************************************
68       
69               
70        #**************TDOO needs to be able to handle 'hours since'********
71        #print "TIME"
72        #print daysSince
73        #print referenceDate
74        try:
75        #takes days since & reference date and returns time in 1991-09-01 00:00:00 format
76                refYear =int(referenceDate[0:4])
77                refMonth =int( referenceDate[5:7])
78                refDay = int(referenceDate[8:10])
79                refTime = referenceDate [-8:]
80                now = datetime.date(refYear,refMonth, refDay)
81                difference = datetime.timedelta(days=daysSince)
82       
83                newDateTime = now+difference
84        #add the hrs mins seconds back in.
85                newDateTime = str(newDateTime) + 'T' + refTime
86        except ValueError:
87                #for now, just return the inputs.
88                newDateTime = str(daysSince) + ' ' + (referenceDate)
89        return newDateTime
90       
91       
92def getTimePositionList(directory):
93        #obselete. I think..
94        #create the values list for the TimePositionList list element.
95       
96        files=index(directory,0)
97        tpl =""
98       
99        DI=csmllibs.csmldataiface.DataInterface()
100        #grab any (first) file                 
101        DI=DI.getUnknownInterfaceType(files[0])
102        DI.openFile(files[0])
103        #fileobj=cdms.open( files[0] )
104        #get the reference date for the time reference system.
105        #var = fileobj[timedimension]
106        DI.setVariable[timedimension]
107        #TO DO ERROR: if this line errors it's probably that user hasn't specified time dimension (-t)
108        refTime=DI.getVariableAttribute('units')
109        #print "REFTIME"
110        #print refTime
111        #refTime = getattr(var,'units')
112        #remove characters:  'days since'
113        #To do, hours since.....!
114        refTime = refTime[11:len(refTime)]
115        fileobj.close()
116       
117        #print "no of files" + str(len(files))
118        #for i in range(0, len(files)):
119        #if no. of files is great use wildcard, else use names
120        #IMPORTANT - do files open in right order...????!??
121        #print "lenfiles:"
122        #print len(files)
123        for i in range(0, len(files)):
124               
125                DI.openFile(files[i])
126                DI.setVariable(timedimension)
127                data =getDataForVar()
128                print files[i]
129                print "TIME STRING:" + str(data)
130               
131                #fileobj=cdms.open( files[i] )
132                #var = fileobj[timedimension]
133                #data = var.getValue()
134                for j in range(0, len(data)):
135                        timevalue = udunitsTime(data[j], refTime)
136                        tpl = tpl + ' ' + str(timevalue)
137                        #fileobj.close()
138                DI.closeFile()
139                if i % 10 == 0:
140                        print i
141        return tpl
142               
143def getFileTimeList(filelist, timedim):
144       
145        #****************************************************************************************
146        #Given a list of files and a name for the time dimension this function will return a list containing
147        # filename/time pairs eg tuple [(ta,fa),(tb,fb),(tc,fc)] in the correct temporal order.
148        #if files contain more than one time, then the tuple will be of the form:
149        #[(ta1,ta2,ta3,fa),(tb1,tb2,tb3,fb),(tc1,tc2,tc3,fc)]
150        #*****************************************************************************************
151        FileTimeList = []
152
153        print "len of filelist = " + str(len(filelist))
154        DI=csmllibs.csmldataiface.DataInterface()
155        #grab any (first) file                 
156       
157        DI=DI.getUnknownInterfaceType(filelist[0])
158        for i in range(0,len(filelist)):
159        #for i in range(0,20):
160                #print "opening" + filelist[i]
161                #print timedim
162                DI.openFile(filelist[i])
163                #print DI.getListOfAxes()
164                #print DI.getListofVariables()
165               
166                try:
167                        DI.setAxis(timedim)
168                except:
169                        print "Could not set time axis"
170                        print "check you have the correct time axis (-t) set"
171                        sys.exit()
172                data =DI.getDataForAxis()
173                #fileobj=cdms.open( filelist[i])
174                #var = fileobj[timedim]
175                #data=var.getValue()
176                times=[]
177                for j in range(0,len(data)):
178                        times.append(data[j])
179                #ftTuple = ( data[j], filelist[i])
180                ftTuple = (times, filelist[i])
181                FileTimeList.append(ftTuple)
182                DI.closeFile()
183                #fileobj.close()
184                if i % 20 == 0:
185                        print i
186        FileTimeList.sort()
187        #print "FTLIST"
188        #print FileTimeList
189        #convert times to CSML format times
190        #grab any (first) file                 
191        #fileobj=cdms.open(filelist[0])
192        DI.openFile(filelist[i])
193        #get the reference date for the time reference system.
194        DI.setAxis(timedim)
195        #var = fileobj[timedim]
196#TO DO ERROR: if this line errors it's probably that user hasn't specified time dimension (-t)
197        #refTime=DI.getVariableAttribute('units')
198
199        refTime=DI.getTimeUnits()
200        #refTime = getattr(var,'units')
201        #remove characters:  'days since' 
202        # to do - make this work for hours.minutes since too!
203        refTime = refTime[11:len(refTime)]
204        #print "REFTIME2"
205        #print refTime
206        FormattedFileTimeList = []
207        for j in range (0,len(FileTimeList)):
208                timeList = FileTimeList[j][0]
209                #print 'timelist_____________________' +str(timeList)
210                for k in range(0, len(timeList)):
211                        uduTime = udunitsTime(timeList[k], refTime)
212                        ftTuple = ( uduTime, filelist[j])
213                        FormattedFileTimeList.append(ftTuple)
214        return FormattedFileTimeList   
215
216
217def GetOriginPosition(timestr):
218                        #given a " messy" timestring eg ,Sample Time in elapsed UTs from 0hrs on 08-AUG-02, try to get the date info.
219        stringchunks = timestr.split()
220        #guess which is the best date
221        #for chunk in stringchunks:
222        #       if chunk
223        #doesn't do anything yet!
224        return timestr
225
226def isdate(str):
227       
228        return result
Note: See TracBrowser for help on using the repository browser.