- Timestamp:
- Nov 28, 2016, 4:16:32 PM (9 years ago)
- File:
-
- 1 edited
-
trunk/tools/generic_tools.py (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/generic_tools.py
r1330 r1357 369 369 return combos 370 370 371 def datetimeStr_datetime(StringDT): 372 """ Function to transform a string date ([YYYY]-[MM]-[DD]_[HH]:[MI]:[SS] format) to a date object 373 >>> datetimeStr_datetime('1976-02-17_00:00:00') 374 1976-02-17 00:00:00 375 """ 376 import datetime as dt 377 378 fname = 'datetimeStr_datetime' 379 380 dateD = np.zeros((3), dtype=int) 381 timeT = np.zeros((3), dtype=int) 382 383 dateD[0] = int(StringDT[0:4]) 384 dateD[1] = int(StringDT[5:7]) 385 dateD[2] = int(StringDT[8:10]) 386 387 trefT = StringDT.find(':') 388 if not trefT == -1: 389 # print ' ' + fname + ': refdate with time!' 390 timeT[0] = int(StringDT[11:13]) 391 timeT[1] = int(StringDT[14:16]) 392 timeT[2] = int(StringDT[17:19]) 393 394 if int(dateD[0]) == 0: 395 print warnmsg 396 print ' ' + fname + ': 0 reference year!! changing to 1' 397 dateD[0] = 1 398 399 newdatetime = dt.datetime(dateD[0], dateD[1], dateD[2], timeT[0], timeT[1], timeT[2]) 400 401 return newdatetime 402 371 403 def datetimeStr_conversion(StringDT,typeSi,typeSo): 372 404 """ Function to transform a string date to an another date object … … 375 407 typeSo= type of datetime string output 376 408 [typeSi/o] 377 'cfTime' : [time],[units]; ]time in CF-convention format [units] = [tunits] since [refdate]409 'cfTime',[units]: time in CF-convention format [units] = [tunits] since [refdate] 378 410 'matYmdHMS': numerical vector with [[YYYY], [MM], [DD], [HH], [MI], [SS]] 379 411 'YmdHMS': [YYYY][MM][DD][HH][MI][SS] format … … 385 417 >>> datetimeStr_conversion('1976-02-17_08:32:05','Y-m-d_H:M:S','matYmdHMS') 386 418 [1976 2 17 8 32 5] 387 >>> datetimeStr_conversion(str(137880) +',minutes since 1979-12-01_00:00:00','cfTime','Y/m/d H-M-S')419 >>> datetimeStr_conversion(str(137880),'cfTime,minutes since 1979-12-01_00:00:00','Y/m/d H-M-S') 388 420 1980/03/05 18-00-00 421 >>> datetimeStr_conversion('1980/03/05 18-00-00','Y/m/d H-M-S','cfTime,minutes since 1979-12-01_00:00:00') 422 137880.0 389 423 """ 390 424 import datetime as dt … … 397 431 quit() 398 432 399 if typeSi == 'cfTime':400 timeval = np.float(StringDT .split(',')[0])401 tunits = StringDT.split(',')[1].split(' ')[0]402 Srefdate = StringDT.split(',')[1].split(' ')[2]433 if typeSi[0:6] == 'cfTime': 434 timeval = np.float(StringDT) 435 tunits = typeSi.split(',')[1].split(' ')[0] 436 Srefdate = typeSi.split(',')[1].split(' ')[2] 403 437 404 438 # Does reference date contain a time value [YYYY]-[MM]-[DD] [HH]:[MI]:[SS] … … 408 442 dayref=Srefdate[8:10] 409 443 410 trefT = Srefdate.find(':')444 trefT = typeSi.split(',')[1].find(':') 411 445 if not trefT == -1: 412 # print ' ' + fname + ': refdate with time!' 413 horref=Srefdate[11:13] 414 minref=Srefdate[14:16] 415 secref=Srefdate[17:19] 446 if len(typeSi.split(',')[1].split(' ')) == 3: 447 horref=Srefdate[11:13] 448 minref=Srefdate[14:16] 449 secref=Srefdate[17:19] 450 else: 451 Sreftime = typeSi.split(',')[1].split(' ')[3] 452 horref=Sreftime[0:2] 453 minref=Sreftime[3:5] 454 secref=Sreftime[6:8] 416 455 refdate = datetimeStr_datetime( yrref + '-' + monref + '-' + dayref + \ 417 456 '_' + horref + ':' + minref + ':' + secref) … … 501 540 quit(-1) 502 541 503 if typeSo == 'matYmdHMS': 542 if typeSo[0:6] == 'cfTime': 543 tunits = typeSo.split(',')[1].split(' ')[0] 544 Srefdate = typeSo.split(',')[1].split(' ')[2] 545 546 # Does reference date contain a time value [YYYY]-[MM]-[DD] [HH]:[MI]:[SS] 547 ## 548 yrref=Srefdate[0:4] 549 monref=Srefdate[5:7] 550 dayref=Srefdate[8:10] 551 552 trefT = typeSo.split(',')[1].find(':') 553 if not trefT == -1: 554 # print ' ' + fname + ': refdate with time!' 555 if len(typeSo.split(',')[1].split(' ')) == 3: 556 horref=Srefdate[11:13] 557 minref=Srefdate[14:16] 558 secref=Srefdate[17:19] 559 else: 560 Sreftime = typeSo.split(',')[1].split(' ')[3] 561 horref=Sreftime[0:2] 562 minref=Sreftime[3:5] 563 secref=Sreftime[6:8] 564 565 refdate = datetimeStr_datetime( yrref + '-' + monref + '-' + dayref + \ 566 '_' + horref + ':' + minref + ':' + secref) 567 else: 568 refdate = datetimeStr_datetime( yrref + '-' + monref + '-' + dayref + \ 569 + '_00:00:00') 570 datei = dt.datetime(yr, mo, da, ho, mi, se) 571 difft = datei - refdate 572 573 if searchInlist(dir(difft),'total_seconds'): 574 totsecs = difft.total_seconds() 575 else: 576 totsecs = difft.days()*24*3600. + difft.seconds() 577 578 if tunits == 'weeks': 579 cfdt = totsecs / (7*24*3600) 580 elif tunits == 'days': 581 cfdt = totsecs / (24*3600) 582 elif tunits == 'hours': 583 cfdt = totsecs / (3600) 584 elif tunits == 'minutes': 585 cfdt = totsecs / (60) 586 elif tunits == 'seconds': 587 cfdt = totsecs 588 elif tunits == 'milliseconds': 589 cfdt = totsecs*100. 590 else: 591 print errormsg 592 print ' timeref_datetime: time units "' + tunits + '" not ready!!!!' 593 quit(-1) 594 dateYmdHMS = cfdt 595 596 elif typeSo == 'matYmdHMS': 504 597 dateYmdHMS = np.zeros((6), dtype=int) 505 598 dateYmdHMS[0] = yr … … 2134 2227 return valpos 2135 2228 2136 def index_mat(mat,val ):2229 def index_mat(mat,val,quitval=True): 2137 2230 """ Function to provide the coordinates of a given value inside a matrix 2138 2231 index_mat(mat,val) 2139 2232 mat= matrix with values 2140 2233 val= value to search 2234 quitval= Whether one should arise quit signal in case no grid-point is found 2141 2235 >>> index_mat(np.arange(27).reshape(3,3,3),22) 2142 2236 [2 1 1] 2143 2237 """ 2144 2145 2238 fname = 'index_mat' 2146 2239 … … 2148 2241 2149 2242 matlist = list(mat.flatten()) 2243 2244 # From: https://www.google.com.ar/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwj30JLKjMfQAhUEthoKHVAkAwoQFggtMAI&url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F7571635%2Ffastest-way-to-check-if-a-value-exist-in-a-list&usg=AFQjCNFboI4YVafR26qSpyj5zx5GrQ3LGQ&bvm=bv.139782543,d.d2s 2245 if not val in matlist: 2246 print errormsg 2247 print ' ' + fname + ': matrix does not content ', val,' !!' 2248 if quitval: 2249 quit(-1) 2250 else: 2251 return -1 2150 2252 ifound = matlist.index(val) 2151 2253 … … 2385 2487 else: 2386 2488 return end 2387 2388 def datetimeStr_datetime(StringDT):2389 """ Function to transform a string date ([YYYY]-[MM]-[DD]_[HH]:[MI]:[SS] format) to a date object2390 >>> datetimeStr_datetime('1976-02-17_00:00:00')2391 1976-02-17 00:00:002392 """2393 import datetime as dt2394 2395 fname = 'datetimeStr_datetime'2396 2397 dateD = np.zeros((3), dtype=int)2398 timeT = np.zeros((3), dtype=int)2399 2400 dateD[0] = int(StringDT[0:4])2401 dateD[1] = int(StringDT[5:7])2402 dateD[2] = int(StringDT[8:10])2403 2404 trefT = StringDT.find(':')2405 if not trefT == -1:2406 # print ' ' + fname + ': refdate with time!'2407 timeT[0] = int(StringDT[11:13])2408 timeT[1] = int(StringDT[14:16])2409 timeT[2] = int(StringDT[17:19])2410 2411 if int(dateD[0]) == 0:2412 print warnmsg2413 print ' ' + fname + ': 0 reference year!! changing to 1'2414 dateD[0] = 12415 2416 newdatetime = dt.datetime(dateD[0], dateD[1], dateD[2], timeT[0], timeT[1], timeT[2])2417 2418 return newdatetime2419 2489 2420 2490 def dateStr_date(StringDate): … … 3774 3844 3775 3845 class Quantiles(object): 3776 """ Class to provide quantiles from a given array of values3846 """ Class to provide quantiles from a given array of values 3777 3847 """ 3778 3848 … … 9229 9299 return tB 9230 9300 9231 def same_shape(mat1,mat2 ):9301 def same_shape(mat1,mat2,quitval=True): 9232 9302 """ Function to check if two matrices have the same shape 9233 9303 mat1,2= matrices to check 9234 9304 """ 9235 9305 fname = 'same_shape' 9306 9307 same = True 9236 9308 9237 9309 shape1 = mat1.shape … … 9246 9318 print ' Ndims mat 1:', Ndims1,' Ndims mat2:', Ndims2 9247 9319 print ' shape mat 1:', shape1, 'mat 2:', shape2 9248 quit(-1) 9320 same = False 9321 if quitval: quit(-1) 9249 9322 9250 9323 for idn in range(Ndims1): … … 9254 9327 print ' Length mat 1:', shape1[idn],' Length mat2:', shape2[idn] 9255 9328 print ' shape mat 1:', shape1, 'mat 2:', shape2 9256 quit(-1) 9257 9258 return 9329 same = False 9330 if quitval: quit(-1) 9331 9332 return same 9259 9333 9260 9334 def index_flatten_mat(index,Ldims):
Note: See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/LMDZ_WRF/chrome/site/your_project_logo.png)