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

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

now using cdtime for time conversion

  • 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
16import cdtime
17
18def createRefsys(csmldoc, dataset_element):
19        #opens <ReferenceSystemDefinitions> tag
20        RefSys_element=csmldoc.createElement("ReferenceSystemDefinitions")
21        RefSys_element.setAttribute('gml:id', 'RefSysDefs')
22        return csmldoc, dataset_element, RefSys_element
23
24def createTimeCoordSystem(csmldoc, dataset_element, RefSys_element,ffmap):
25        repFiles = ffmap.getRepresentativeFiles()
26        i =0
27        for  file in repFiles:
28                i = i+1
29                filename= file.getRepresentativeFileName()
30                DI = csmllibs.csmldataiface.DataInterface()
31                DI = DI.getUnknownInterfaceType(filename)
32                DI.openFile(filename)
33                axes=DI.getListOfAxes()
34                timedim = 'undetermined'
35                if len(axes)==1:
36                        #then this must be the time axis
37                        timedim=axes[0]
38                TCS_element = csmldoc.createElement('TimeCoordinateSystem')
39                TCS_element.setAttribute('gml:id', 'RefSys' +str(i))
40                gml_description_element =csmldoc.createElement('gml:description')
41                gml_name_element =csmldoc.createElement('gml:name')
42                gml_originPosition_element =csmldoc.createElement('gml:originPosition')
43                gml_interval_element =csmldoc.createElement('gml:interval')
44                       
45                date=GetOriginPosition(timedim)
46                print 'date:'
47                print str(date)
48               
49                TCS_element.appendChild(gml_description_element)
50                TCS_element.appendChild(csmldoc.createTextNode(date))
51                TCS_element.appendChild(gml_name_element)
52                TCS_element.appendChild(gml_originPosition_element)
53                TCS_element.appendChild(gml_interval_element)
54                RefSys_element.appendChild(TCS_element)
55                DI.closeFile()
56       
57        return csmldoc, dataset_element, RefSys_element
58
59def closeRefSys(csmldoc,dataset_element, RefSys_element):
60        #closes </ReferenceSystemDefinitions> tag
61        dataset_element.appendChild(RefSys_element)
62        return csmldoc, dataset_element
63
64def CSMLtimeToUDtime(time):
65        #time string manipulation  - convert  2783-5-22T0:0:0.0 to 2783-5-22 0:0:0.0
66    return str(time).replace ('T', ' ')
67
68def UDtimeToCSMLtime(time):
69    #time string manipulation  - convert 2783-5-22 0:0:0.0 to 2783-5-22T0:0:0.0
70    return str(time).replace (' ', 'T')
71               
72def getFileTimeList(filelist, timedim):
73   
74        #****************************************************************************************
75        #Given a list of files and a name for the time dimension this function will return a list containing
76        # filename/time pairs eg tuple [(ta,fa),(tb,fb),(tc,fc)] in the correct temporal order.
77        #if files contain more than one time, then the tuple will be of the form:
78        #[(ta1,ta2,ta3,fa),(tb1,tb2,tb3,fb),(tc1,tc2,tc3,fc)]
79        #*****************************************************************************************
80        FileTimeList = []
81        print "len of filelist = " + str(len(filelist))
82        DI=csmllibs.csmldataiface.DataInterface()
83        #grab any (first) file                 
84       
85        DI=DI.getUnknownInterfaceType(filelist[0])
86        for i in range(0,len(filelist)):
87                DI.openFile(filelist[i])
88                try:
89                        DI.setAxis(timedim)
90                except:
91                        print "Could not set time axis"
92                        print "check you have the correct time axis (-t) set"
93                        sys.exit()
94                data =DI.getDataForAxis()
95                times=[]
96                for j in range(0,len(data)):
97                        times.append(data[j])
98                ftTuple = (times, filelist[i])
99                FileTimeList.append(ftTuple)
100                DI.closeFile()
101                if i % 20 == 0:
102                        print i
103        FileTimeList.sort()
104        DI.openFile(filelist[i])
105        #get the reference date for the time reference system.
106        DI.setAxis(timedim)
107        refTime=DI.getTimeUnits()
108        FormattedFileTimeList = []
109        for j in range (0,len(FileTimeList)):
110                timeList = FileTimeList[j][0]
111                #print 'timelist_____________________' +str(timeList)
112                for k in range(0, len(timeList)):
113                        relativetime= cdtime.reltime(timeList[k], refTime)
114                        uduTime=UDtimeToCSMLtime(relativetime.tocomp())
115                        ftTuple = (uduTime, filelist[j])
116                        FormattedFileTimeList.append(ftTuple)
117        return FormattedFileTimeList   
118
119def OLDgetFileTimeList(filelist, timedim):
120       
121        #****************************************************************************************
122        #Given a list of files and a name for the time dimension this function will return a list containing
123        # filename/time pairs eg tuple [(ta,fa),(tb,fb),(tc,fc)] in the correct temporal order.
124        #if files contain more than one time, then the tuple will be of the form:
125        #[(ta1,ta2,ta3,fa),(tb1,tb2,tb3,fb),(tc1,tc2,tc3,fc)]
126        #*****************************************************************************************
127        FileTimeList = []
128
129        print "len of filelist = " + str(len(filelist))
130        DI=csmllibs.csmldataiface.DataInterface()
131        #grab any (first) file                 
132       
133        DI=DI.getUnknownInterfaceType(filelist[0])
134        for i in range(0,len(filelist)):
135        #for i in range(0,20):
136                #print "opening" + filelist[i]
137                #print timedim
138                DI.openFile(filelist[i])
139                #print DI.getListOfAxes()
140                #print DI.getListofVariables()
141               
142                try:
143                        DI.setAxis(timedim)
144                except:
145                        print "Could not set time axis"
146                        print "check you have the correct time axis (-t) set"
147                        sys.exit()
148                data =DI.getDataForAxis()
149                #fileobj=cdms.open( filelist[i])
150                #var = fileobj[timedim]
151                #data=var.getValue()
152                times=[]
153                for j in range(0,len(data)):
154                        times.append(data[j])
155                #ftTuple = ( data[j], filelist[i])
156                ftTuple = (times, filelist[i])
157                FileTimeList.append(ftTuple)
158                DI.closeFile()
159                #fileobj.close()
160                if i % 20 == 0:
161                        print i
162        FileTimeList.sort()
163        #print "FTLIST"
164        #print FileTimeList
165        #convert times to CSML format times
166        #grab any (first) file                 
167        #fileobj=cdms.open(filelist[0])
168        DI.openFile(filelist[i])
169        #get the reference date for the time reference system.
170        DI.setAxis(timedim)
171        #var = fileobj[timedim]
172#TO DO ERROR: if this line errors it's probably that user hasn't specified time dimension (-t)
173        #refTime=DI.getVariableAttribute('units')
174
175        refTime=DI.getTimeUnits()
176        #refTime = getattr(var,'units')
177        #remove characters:  'days since' 
178        # to do - make this work for hours.minutes since too!
179        refTime = refTime[11:len(refTime)]
180        #print "REFTIME2"
181        #print refTime
182        FormattedFileTimeList = []
183        for j in range (0,len(FileTimeList)):
184                timeList = FileTimeList[j][0]
185                #print 'timelist_____________________' +str(timeList)
186                for k in range(0, len(timeList)):
187                        uduTime = udunitsTime(timeList[k], refTime)
188                        ftTuple = ( uduTime, filelist[j])
189                        FormattedFileTimeList.append(ftTuple)
190        return FormattedFileTimeList   
191               
192def GetOriginPosition(timestr):
193                        #given a " messy" timestring eg ,Sample Time in elapsed UTs from 0hrs on 08-AUG-02, try to get the date info.
194        stringchunks = timestr.split()
195        #guess which is the best date
196        #for chunk in stringchunks:
197        #       if chunk
198        #doesn't do anything yet!
199        return timestr
200
201def isdate(str):
202       
203        return result
Note: See TracBrowser for help on using the repository browser.