Changeset 203 for CedaCdoScripts


Ignore:
Timestamp:
28/08/14 17:49:54 (5 years ago)
Author:
mjuckes
Message:

modifications for mclim30; adding option to use rcp45 as extension for mohc historical data

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CedaCdoScripts/branch/c1/cdo_basic.py

    r126 r203  
    11#!/usr/bin/python 
    22 
    3 import glob, string, os 
     3import glob, string, os, collections 
    44import subprocess, time, sys 
    5 import cdms2 as cdms 
     5##import cdms2 as cdms 
     6import netCDF4 
     7nc4 = True 
    68import random, time, logging, getopt, shelve 
    79 
     
    1113ad = { 'i':'inst', 'm':'model', 'e':'ensem', 'r':'realm', 'b':'batch', 'x':'expt', 'o':'outDir' } 
    1214 
    13 knownops = ['am','sm','bm','mclim5','cdd','cwd','tr', 'fd'] 
     15knownops = ['am','sm','bm','mclim5','mclim30','cdd','cwd','tr', 'fd'] 
    1416optag = args[-1][0] 
    1517assert optag in knownops, 'First argument [%s] should be operation in: %s' % (optag, str(knmownops)) 
     
    2224fullYears = True 
    2325 
     26print args 
    2427edict = {} 
    2528for a in args[0]: 
     
    8790  batching = '5yr' 
    8891  monthsPerBatch = 60 
     92elif optag in ['mclim30']: 
     93  batching = '30yr' 
     94  monthsPerBatch = 360 
    8995elif optag in ['cdd','cwd','tr','fd']: 
    9096  batching = 'yr' 
     
    193199dir_tmpl_e = '/badc/cmip5/data/cmip5/output1/%(inst)s/%(model)s/%(expt)s/%(ifreq)s/%(realm)s/%(mip)s/%(ensem)s/latest/' 
    194200dir_tmpl = dir_tmpl_e + '%(var)s/' 
    195 bldir_tmpl = '/home/users/prototype/cmip_processing/cmip5_bl/output1_%(inst)s_%(model)s_%(expt)s/' 
     201##  
     202blBaseDir = '/group_workspaces/jasmin/cedaproc/mjuckes/work/qc/cmip5_bl' 
     203bldir_tmpl =  blBaseDir + '/output1_%(inst)s_%(model)s_%(expt)s/' 
    196204blfile_tmpl = '%(ifreq)s_%(realm)s_%(mip)s_%(ensem)s_%(version)s.txt' 
    197205 
    198206 
    199 def get_var_from_bl_record( rec ): 
     207def get_var_from_bl_record0( rec ): 
    200208  bits = string.split( rec, ':' ) 
    201209  if len(bits) < 2: 
     
    207215  return var 
    208216 
     217def get_var_from_bl_record( rec ): 
     218  bits = string.split( rec, ':' ) 
     219  if len(bits) < 2: 
     220    return None 
     221  var = bits[0] 
     222  return var 
     223 
    209224def get_version_dir(version=None): 
    210225 
     
    221236  return vlist[-1] 
    222237 
    223 def get_expt_fl(expt,var): 
     238 
     239fileidrec = collections.namedtuple( 'FileIdRecord', ['stem','starty','endy','startm','endm','isDefDir','dir','ext'] ) 
     240 
     241def get_expt_fl(expt,var,latest=False): 
    224242  pdict = { 'inst':inst, 'model':model, 'expt':expt, 'var':var, 'ensem':ensem, 'ifreq':ifreq, 'realm':realm, 'mip':mip } 
    225243  bldir = bldir_tmpl % pdict 
    226244  rdir = dir_tmpl_r % pdict 
    227   vlist = glob.glob( rdir + 'v*' ) 
    228   vlist.sort() 
    229   edir = '%s/%s/' % (vlist[-1],var) 
     245  if not latest: 
     246    vlist = glob.glob( rdir + 'v*' ) 
     247    vlist.sort() 
     248    edir = '%s/%s/' % (vlist[-1],var) 
     249  else: 
     250    edir = '%s/latest/%s/' % (rdir,var) 
    230251  ## edir = dir_tmpl % { 'inst':inst, 'model':model, 'expt':expt, 'var':var, 'ensem':ensem, 'ifreq':ifreq, 'realm':realm, 'mip':mip } 
    231252  assert os.path.isdir( edir), 'Error in get_expt_fl: %s is not a directory' % edir 
    232253  log.info( 'edir:: %s' % edir ) 
    233   fl = glob.glob( edir + '*.nc' ) 
     254  fl = glob.glob( edir + '*.nc' ) + glob.glob( edir + '*.nc4' ) 
    234255  assert len(fl) > 0, 'No netcdf files found in %s' % edir 
    235256  fl.sort() 
    236257  fm = [] 
    237258  blvars = [] 
     259  withRcp45Ext = False 
    238260  if os.path.isdir( bldir ): 
    239     this_version = string.split( string.strip(vlist[-1], '/'), '/' )[-1] 
     261    if not latest: 
     262      this_version = string.split( string.strip(vlist[-1], '/'), '/' )[-1] 
     263    else: 
     264      this_version = 'latest' 
    240265    pdict['version'] = this_version 
    241266    blfile = blfile_tmpl % pdict 
     
    245270        log.info( 'Skipping black-listed ADS expt=%s, var=%s' % (expt,var) ) 
    246271        return fm 
     272      elif '%s__rcp45' % var in blvars: 
     273        log.info( 'Using rcp45 data to complete time range expt=%s, var=%s' % (expt,var) ) 
     274        withRcp45Ext = True 
    247275      else: 
    248276        log.info( 'Var %s not in black list [%s] %s' % (var, bldir + blfile, str(blvars)) ) 
     
    251279  else: 
    252280    log.info( 'Black list directory %s not present' % bldir ) 
     281  if withRcp45Ext: 
     282    altDir = string.replace( edir, pdict['expt'], 'rcp45' ) 
     283    fl2 = glob.glob( altDir + '*.nc' ) + glob.glob( altDir + '*.nc4' ) 
     284    assert len(fl2) > 0, 'No netcdf files found in %s' % altDir 
     285    fl2.sort() 
     286    fl.append(  fl2[0] ) 
    253287  for f in fl: 
    254288    fn = string.split(f, '/')[-1] 
     
    271305      else: 
    272306        endy = starty 
    273       fm.append( (stem,starty,endy,startm,endm) ) 
     307      if withRcp45Ext and f == fl[-1]: 
     308        fm.append( fileidrec(stem,starty,endy,startm,endm,False,altDir,None) ) 
     309      else: 
     310        fm.append( fileidrec(stem,starty,endy,startm,endm,True,None,None) ) 
    274311    else: 
    275       fm.append( (stem,None,None,None,None) ) 
     312      fm.append( fileidrec(stem,None,None,None,None,True,None,None) ) 
    276313      assert batching != '5yr', 'No time bounds in filename: %s (batching = %s)' % (fn,batching) 
    277314  return fm 
     
    281318ofiles = {} 
    282319ifiles = {} 
     320eextras = {} 
    283321tids = {} 
    284322varld = {} 
     
    336374for expt in expts: 
    337375  for var in varld[expt]: 
    338      fm = get_expt_fl( expt, var ) 
     376     fm = get_expt_fl( expt, var, latest=True ) 
    339377     if len(fm) > 0: 
    340378        ye.append( (expt,var,fm) ) 
    341379     else: 
     380        print 'Bad key: %s_%s' % (expt,var), fm, type(fm).__name__ 
    342381        badkeys.append( '%s_%s' % (expt,var) ) 
    343382 
     
    350389                        'bm':('fldmean -sellonlatbox,%s,%s,%s,%s' % (lon1,lon2,lat1,lat2),ifreq,'Box mean','Spatial mean over a latitude-longitude box'), \ 
    351390                        'mclim5':('ymonavg', '5yr','5-year monthly climatology','Monthly climatology for 5 year period: 5 year mean for each month'), 
     391                        'mclim30':('ymonavg', '30yr','30-year monthly climatology','Monthly climatology for 30 year period: 30 year mean for each month'), 
    352392                        'cdd':('eca_cdd','yr','Continuous dry days','Maximum of continuous dry days in a year'), 
    353393                        'cwd':('eca_cwd','yr','Consecutive wet days','Maximum of consecutive wet days in a year'), 
     
    366406print 'INFO0080: ',k, str(k), str( [1,2,3] ) 
    367407##for expt,var,fm in ye: 
     408mclim30batching = [1901,1961,1976] 
    368409def run_evf( expt,var,fm ): 
    369410    kk = 0 
     
    379420    modtime = '%4.4i%2.2i%2.2i' % mtime[0:3] 
    380421    log.info( 'Starting expt=%s, var=%s [# files = %s, dir mod time: %s]' % (expt,var,len(fm),modtime ) ) 
     422    log.info( 'Data directory: %s' % (rdir) ) 
    381423       
    382424    if not eeproc.has_key( var ): 
     
    390432      eeproc[var].append( (modtime,len(fm),timenow,rdir) ) 
    391433    for file in fm: 
    392         nc = cdms.open( '%s%s.nc' % (edir,file[0]) ) 
    393         tid = nc.tracking_id 
    394         crd = nc.creation_date 
    395         table_id = nc.table_id 
    396         realization = nc.realization[0] 
    397         initialization_method = nc.initialization_method[0] 
    398         physics_version = nc.physics_version[0] 
    399         if 'time' in nc.axes.keys(): 
     434        if nc4: 
     435          if file.isDefDir: 
     436            fpath =  '%s%s.nc' % (edir,file[0])  
     437          else: 
     438            print 'using alternative directory: %s ' % file.dir 
     439            fpath =  '%s%s.nc' % (file.dir,file[0])  
     440          nc = netCDF4.Dataset(fpath, 'r') 
     441          kl = ['tracking_id','creation_date','table_id','realization','initialization_method','physics_version','history'] 
     442          tid,crd,table_id,realization,initialization_method,physics_version,this_hist = map( lambda x: nc.getncattr(x), kl ) 
     443          calendar = nc.variables['time'].getncattr('calendar') 
     444          nc.close() 
     445        else: 
     446 
     447          nc = cdms.open( '%s%s.nc' % (edir,file[0]) ) 
     448          tid = nc.tracking_id 
     449          crd = nc.creation_date 
     450          table_id = nc.table_id 
     451          realization = nc.realization[0] 
     452          initialization_method = nc.initialization_method[0] 
     453          physics_version = nc.physics_version[0] 
     454          this_hist = nc.history 
     455          if 'time' in nc.axes.keys(): 
    400456           calendar = nc.getAxis('time').attributes.get( 'calendar', 'none' ) 
    401457           if calendar == 'none': 
    402458             print 'calendar attribute not found' 
    403         else: 
    404            print 'time axis not found' 
    405            calendar = 'none' 
    406         print 'calendar = %s' % calendar 
     459          else: 
     460             print 'time axis not found' 
     461             calendar = 'none' 
     462          print 'calendar = %s' % calendar 
     463          nc.close() 
    407464        log.info( 'File: %s; tracking id: %s; creation date: %s' % (file[0],tid,crd) ) 
    408465  
     
    410467        crds[key] = crd 
    411468        if not hists.has_key(key): 
    412            hists[key] = nc.history 
    413         nc.close() 
     469           hists[key] = this_hist 
    414470        ifiles[key] += '%s,' % file[0] 
     471    if not fm[-1].isDefDir: 
     472      eextras[key] = 'withExt' 
    415473 
    416474    startstart = None 
     
    452510              yl = range(fm[0][1]+1,fm[0][2]+1) 
    453511              cyl = string.join( map( lambda x:'%s' % x, yl), ',' ) 
    454               cmd = '/usr/local/2/bin/cdo -s selyear,%s  %s%s.nc  %s/%s' % (cyl, edir, fm[0][0], tmpdir,'.tmp1.nc') 
     512              cmd = '/usr/bin/cdo -s selyear,%s  %s%s.nc  %s/%s' % (cyl, edir, fm[0][0], tmpdir,'.tmp1.nc') 
    455513              rc = run_cmd( cmd, strict=True ) 
    456514              cfls = ' %s/.tmp1.nc' % tmpdir 
     
    471529              yl = range(fm[-1][1],fm[-1][2]) 
    472530              cyl = string.join( map( lambda x:'%s' % x, yl), ',' ) 
    473               cmd = '/usr/local/2/bin/cdo -s selyear,%s  %s%s.nc  %s/%s' % (cyl, edir, fm[-1][0], tmpdir,'.tmp2.nc') 
     531              cmd = '/usr/bin/cdo -s selyear,%s  %s%s.nc  %s/%s' % (cyl, edir, fm[-1][0], tmpdir,'.tmp2.nc') 
    474532              rc = run_cmd( cmd, strict=True ) 
    475533              cfls += ' %s/.tmp2.nc' % tmpdir 
    476534 
    477535            tfile = '%s/.tmp_ofile_%s_%s.nc' % (tmpdir,expt,var) 
    478             cmd1 = '/usr/local/2/bin/cdo -s mergetime %s %s' % (cfls,tfile) 
    479             cmd = '/usr/local/2/bin/cdo -s %s %s %s' % (cdoop, tfile, ofile) 
     536            cmd1 = '/usr/bin/cdo -s mergetime %s %s' % (cfls,tfile) 
     537            cmd = '/usr/bin/cdo -s %s %s %s' % (cdoop, tfile, ofile) 
    480538            log.info( 'Merging file %s\n' % cmd1 ) 
    481539          else: 
    482540            yl = range(fm[0][1]+1,fm[0][2]) 
    483541            cyl = string.join( map( lambda x:'%s' % x, yl), ',' ) 
    484             cmd = '/usr/local/2/bin/cdo -s selyear,%s  %s%s.nc  %s/%s' % (cyl, edir, fm[0][0], tmpdir,'.tmp1.nc') 
     542            cmd = '/usr/bin/cdo -s selyear,%s  %s%s.nc  %s/%s' % (cyl, edir, fm[0][0], tmpdir,'.tmp1.nc') 
    485543            rc = run_cmd( cmd, strict=True ) 
    486544            cmd1 = None 
    487             cmd = '/usr/local/2/bin/cdo -s %s %s/%s %s' % (cdoop, tmpdir, '.tmp1.nc', ofile) 
     545            cmd = '/usr/bin/cdo -s %s %s/%s %s' % (cdoop, tmpdir, '.tmp1.nc', ofile) 
    488546          log.info( 'cdo command: %s\n' % cmd ) 
    489547          ## raise 'bad file boundary' 
     
    531589            for kkk in range(0,nf,2): 
    532590              ofile = ' %smergefile_%s_%s_%s.nc' % (tmpdir,expt,var,kkk) 
    533               cmd = '/usr/local/2/bin/cdo -s mergetime %s%s.nc %s%s.nc %s' % (edir, oldfm[kkk][0], edir, oldfm[kkk+1][0], ofile) 
     591              cmd = '/usr/bin/cdo -s mergetime %s%s.nc %s%s.nc %s' % (edir, oldfm[kkk][0], edir, oldfm[kkk+1][0], ofile) 
    534592              fm.append( (ofile,syey[kkk][0],syey[kkk+1][1]) ) 
    535593              if go and step1 and go1: 
     
    548606          ofile = ' %sofile_%s_%s_%s.nc' % (tmpdir,expt,var,kkk) 
    549607          if nodir: 
    550             cmd = '/usr/local/2/bin/cdo -s %s %s.nc %s' % (cdoop, file[0], ofile) 
    551           else: 
    552             cmd = '/usr/local/2/bin/cdo -s %s %s%s.nc %s' % (cdoop, edir, file[0], ofile) 
     608            cmd = '/usr/bin/cdo -s %s %s.nc %s' % (cdoop, file[0], ofile) 
     609          else: 
     610            cmd = '/usr/bin/cdo -s %s %s%s.nc %s' % (cdoop, edir, file[0], ofile) 
    553611          if go and step1 and go1: 
    554612            rc = run_cmd( cmd, strict=False ) 
     
    560618      if nbfb > 0: 
    561619          log.info( 'FILE DATE BOUNDARIES DO NOT MATCH ASSUMPTIONS: %s, %s' % (expt,var) ) 
    562     elif batching in ['5yr','yr']: 
     620    elif batching in ['30yr','5yr','yr']: 
    563621      startstart = fm[0][1] 
    564622      endend = fm[-1][2] 
     
    574632          endend += -1 
    575633 
    576       blen = { 'yr':1, '5yr':5 }[batching] 
    577       if batching == '5yr': 
    578         bstart = ((startstart+3)/5)*5 + 1 
    579         bslast = ((endend)/5 - 1)*5 + 1 
    580       elif batching == 'yr': 
    581         bstart = startstart 
    582         bslast = endend 
    583       nb = (bslast - bstart)/blen + 1 
    584  
    585       for s in range( bstart, bslast+1, blen ): 
     634      blen = { 'yr':1, '5yr':5, '30yr':30 }[batching] 
     635      if batching == '30yr': 
     636        sll = mclim30batching 
     637      else: 
     638        if batching == '5yr': 
     639          bstart = ((startstart+3)/5)*5 + 1 
     640          bslast = ((endend)/5 - 1)*5 + 1 
     641        elif batching == 'yr': 
     642          bstart = startstart 
     643          bslast = endend 
     644        nb = (bslast - bstart)/blen + 1 
     645        sll = range( bstart, bslast+1, blen ) 
     646 
     647      for s in sll: 
    586648        tfm = [] 
    587649        kk += 1 
     
    591653              tfm.append(f) 
    592654        assert len(tfm) <= 2 or blen > 1, 'Not expecting more than 2 elements: %s' % str(tfm) 
     655        print tfm 
    593656        if len(tfm) == 0: 
    594657          print 'No files found in segment %s, %s' % (s,s+blen) 
     
    611674 
    612675        for k in range(len(tfm)-1): 
    613             log.info( 'INFO0100: ',k, str(k), str( [1,2,3] ) ) 
    614             log.info( 'INFO0101: ',k, tfm[k], tfm[k+1] ) 
     676            log.info( string.join(['INFO0100: ',str(k), str( [1,2,3] )] ) ) 
     677            log.info( string.join(['INFO0101: ',str(k), str(tfm[k]), str(tfm[k+1]) ] ) ) 
    615678            a = str(tfm[k]) 
    616679            b = str(tfm[k+1]) 
     
    627690          print 'No files found for year %s ' % y 
    628691        elif len(tfm) == 1: 
    629           cmd = '/usr/local/2/bin/cdo -s %s -selyear,%s %s%s.nc %s' % (this_cdoop,ylist,edir,tfm[0][0],ofile) 
     692          cmd = '/usr/bin/cdo -s %s -selyear,%s %s%s.nc %s' % (this_cdoop,ylist,edir,tfm[0][0],ofile) 
    630693          if go: 
    631694            rc = run_cmd( cmd ) 
     
    633696              log.info( 'Trying to log file maximum value' ) 
    634697              cmdo = 'echo %s%s' % (edir,tfm[0][0]) 
    635               cmd = '/usr/local/2/bin/cdo info %s' % ofile 
     698              cmd = '/usr/bin/cdo info %s' % ofile 
    636699              rc = run_cmd( cmdo, append='/home/users/prototype/cmip_processing/wrk/cdd1/debug.txt' ) 
    637700              rc = run_cmd( cmd, append='/home/users/prototype/cmip_processing/wrk/cdd1/debug.txt' ) 
    638701          else: 
    639702            print 'single: %s' % cmd 
    640         elif len(tfm) == 2: 
     703        elif len(tfm) >= 2: 
    641704          yl1 = [] 
    642705          yl2 = [] 
    643706          for y in range( tfm[0][1],tfm[0][2]+1): 
    644             if y in range( s,s+5): 
     707            if y in range( s,s+blen): 
    645708              yl1.append(y) 
    646           for y in range( tfm[1][1],tfm[1][2]+1): 
    647             if y in range( s,s+5): 
     709          for y in range( tfm[-1][1],tfm[-1][2]+1): 
     710            if y in range( s,s+blen): 
    648711              yl2.append(y) 
    649712          cyl1 = string.join( map( str, yl1 ), ',' ) 
    650713          cyl2 = string.join( map( str, yl2 ), ',' ) 
     714          if len(tfm) == 2: 
     715            midfiles = '' 
     716          else: 
     717            midfiles = string.join( map(lambda x:edir + x[0] + '.nc', tfm[1:-1] ) ) 
    651718          tfile = '%s/.tmp_ofile_%s.nc' % (tmpdir,s) 
    652           cmd1 = '/usr/local/2/bin/cdo -s mergetime -selyear,%s %s%s.nc -selyear,%s %s%s.nc %s' % (cyl1,edir,tfm[0][0], cyl2,edir,tfm[1][0],tfile) 
    653           cmd2 = '/usr/local/2/bin/cdo -s %s %s %s' % (this_cdoop,tfile,ofile) 
     719          cmd1 = '/usr/bin/cdo -s mergetime -selyear,%s %s%s.nc %s -selyear,%s %s%s.nc %s' % (cyl1,edir,tfm[0][0], midfiles, cyl2,edir,tfm[1][0],tfile) 
     720          cmd2 = '/usr/bin/cdo -s %s %s %s' % (this_cdoop,tfile,ofile) 
    654721          if go: 
    655722            if os.path.isfile( tfile ): 
     
    665732        elif tfm[0][3] == 1 and tfm[-1][4] == 12: 
    666733          tfile = '%s/.tmp_ofile_%s.nc' % (tmpdir,s) 
    667           cmd1 = '/usr/local/2/bin/cdo -s mergetime  %s %s' % (string.join( map(lambda x:edir + x[0] + '.nc', tfm ), ' '),tfile) 
    668           cmd2 = '/usr/local/2/bin/cdo -s %s %s %s' % (this_cdoop,tfile,ofile) 
     734          cmd1 = '/usr/bin/cdo -s mergetime  %s %s' % (string.join( map(lambda x:edir + x[0] + '.nc', tfm ), ' '),tfile) 
     735          cmd2 = '/usr/bin/cdo -s %s %s %s' % (this_cdoop,tfile,ofile) 
    669736          if go: 
    670737            if os.path.isfile( tfile ): 
     
    679746            print 'multi1: %s\n     %s' % (cmd1,cmd2) 
    680747        else: 
     748          print '------------tfm------------',len(tfm) 
     749          print tfm 
    681750          raise 'Code missing' 
    682751    return tid, crd, table_id, realization, initialization_method, physics_version, startstart,calendar 
     
    703772      key = '%s_%s' % (expt,var) 
    704773      if key in badkeys: 
    705         log.info( 'Skipping %s because or earlier error' % key ) 
     774        log.info( 'Skipping %s because of earlier error' % key ) 
    706775      elif string.strip( ofiles[key] ) == '': 
    707776        log.info( 'Skipping %s because no output files registered' % key  ) 
     
    728797        version = string.split( string.strip( dir, '/' ), '/' )[-1] 
    729798        esgf_dsid = '%s.%s.%s.%s.%s.%s.%s.%s.%s.%s' % (project,product,inst,expt,model,ifreq,realm,this_mip,ensem,version) 
     799        if eextras.get( key, None ) == 'withExt': 
     800          esgf_dsid += ' (with rcp45 extension)' 
     801        cmval = None 
    730802##cmip5.output1.MIROC.MIROC5.sstClim.monClim.atmos.Amon.r1i1p1.v20111129.xml 
    731803        oo = open( attfile, 'w' ) 
     
    733805        oo.write( '%s %s\n' % ('proc_institute ', 'British Atmospheric Data Centre' ) ) 
    734806        oo.write( '%s %s\n' % ('proc_institute_id ', 'BADC' ) ) 
    735         oo.write( '%s %s\n' % ('proc_machine ', 'cmip-login.badc.rl.ac.uk' ) ) 
     807        oo.write( '%s %s\n' % ('proc_machine ', 'jasmin-sci1.ceda.ac.uk' ) ) 
    736808        oo.write( '%s %s\n' % ('proc_contact ', 'badc@rl.ac.uk, martin.juckes@stfc.ac.uk' ) ) 
    737809        oo.write( '%s %s\n' % ('proc_description ', proc_description ) ) 
     
    776848          attr = '%s_%%(date)s.nc [%s' % (stem,dat) 
    777849          for p in parts[1:]: 
    778             bits = string.split( p, '_' ) 
    779             dat = string.split( bits[-1], '.' )[-1] 
    780             attr += ',' + dat 
    781           attr += ']' 
     850            if string.strip(p) != '': 
     851              bits = string.split( p, '_' ) 
     852              dat = string.split( bits[-1], '.' )[-1] 
     853              attr += ',' + dat 
     854          if eextras.get( key, None ) == 'withExt': 
     855            attr += '*] (* -- last in rcp45)' 
     856          else: 
     857            attr += ']' 
    782858          writeat(oo, 'input_files ', attr, log ) 
    783859        else: 
     
    799875          ##cdoc = 'settaxis,%s-01-01,12:00,365day -mergetime' % startstart 
    800876 
    801           cmd = '/usr/local/2/bin/cdo -s mergetime %s %s' % (ofiles[kkey],tmpofilename) 
    802           rc = run_cmd( cmd ) 
    803877          cdo_extra = '' 
    804878          if optag in ['cdd','cwd']: 
    805879            varTag = { 'cdd':'dry','cwd':'wet' }[optag] 
    806880            cdo_extra = '-chname,consecutive_%s_days_index_per_time_period,%s' % (varTag,ovar) 
     881 
     882          if optag not in ['mclim30']: 
     883            cmd = '/usr/bin/cdo -s mergetime %s %s' % (ofiles[kkey],tmpofilename) 
     884            rc = run_cmd( cmd ) 
    807885          ##if optag in ['cdd', 'tr']: 
    808886            ##cdo_extra = '-settaxis,%s-01-01,12:00,1year' % startstart 
    809887## the desired outcome does not appear to be achievable with cdo 
    810           assert os.path.isfile( tmpofilename ),'File "%s" not found [1], kkey = %s' % (tmpofilename,kkey) 
    811           cmd = '/usr/local/2/bin/cdo -s setgatts,%s %s %s %s/%s' % (attfile,cdo_extra,tmpofilename,opdir,ofilename) 
    812           rc = run_cmd( cmd ) 
     888            assert os.path.isfile( tmpofilename ),'File "%s" not found [1], kkey = %s' % (tmpofilename,kkey) 
     889            cmd = '/usr/bin/cdo -s setgatts,%s %s %s %s/%s' % (attfile,cdo_extra,tmpofilename,opdir,ofilename) 
     890            rc = run_cmd( cmd ) 
     891          else: 
     892            fl = string.split( ofiles[kkey] ) 
     893            assert len(fl) == len(mclim30batching),'Mismatch in length of fl: %s' % str(fl) 
     894            for i in range(len(fl)): 
     895               ofilename = '%s_%s_%s_%s_%s_%s_%s-%s.nc' % (ovar,ofreq,model,expt,ensem,optag,mclim30batching[i],mclim30batching[i]+29) 
     896               cmd = '/usr/bin/cdo -s setgatts,%s %s %s %s/%s' % (attfile,cdo_extra,fl[i],opdir,ofilename) 
     897               rc = run_cmd( cmd ) 
    813898 
    814899          if optag in ['cdd','cwd']: 
     
    826911## -C: prevents ancilliary variables (e.g. associated with the bounds dimension) from being added in 
    827912## 
    828             cmd = '/usr/local/2/bin/ncks -A -C -v time,climBounds,%s ncExtras.nc %s/%s' % (thresholdVname,opdir,ofilename) 
     913            cmd = '/usr/bin/ncks -A -C -v time,climBounds,%s ncExtras.nc %s/%s' % (thresholdVname,opdir,ofilename) 
    829914            log.info( 'xxx: %s' % cmd ) 
    830915            if optag == 'cwd': 
     
    844929        else: 
    845930          assert os.path.isfile( string.strip(ofiles[kkey]) ), 'File "%s" not found [2], kkey = %s' % (ofiles[kkey], kkey) 
    846           cmd = '/usr/local/2/bin/cdo -s setgatts,%s %s %s/%s' % (attfile,ofiles[kkey],opdir,ofilename) 
     931          cmd = '/usr/bin/cdo -s setgatts,%s %s %s/%s' % (attfile,ofiles[kkey],opdir,ofilename) 
    847932          log.info( 'Command: %s\n' %  cmd ) 
    848933          rc = run_cmd( cmd ) 
    849934 
    850935        ###cmd = '/usr/local/2/bin/ncatted -a cell_methods,%s,o,c,%s %s' % (var,cmval,ofilename) 
    851         cmd = ['/usr/local/2/bin/ncatted','-a','cell_methods,%s,o,c,%s' % (ovar,cmval)] 
    852         for c in attedExtras: 
    853           cmd.append(c) 
    854         cmd.append('%s/%s' % (opdir,ofilename)) 
    855         rc = run_cmd( cmd ) 
     936          if cmval != None or len(attedExtras) > 0: 
     937            cmd = ['/usr/local/2/bin/ncatted',] 
     938            if cmval != None: 
     939              cmd += ['-a','cell_methods,%s,o,c,%s' % (ovar,cmval)] 
     940            for c in attedExtras: 
     941              cmd.append(c) 
     942            cmd.append('%s/%s' % (opdir,ofilename)) 
     943            rc = run_cmd( cmd ) 
    856944 
    857945def close_all(): 
Note: See TracChangeset for help on using the changeset viewer.