Exemple #1
0
def calc_monthly_linpatterncorr(ncdt,lin='one',northof=0,conv=1,vert=False):
    
    """ Computes the pattern correlation b/w the 'SUM' and 'FULL'
           for given 'lin'. Input data is climatology of spatial data.
           
           computes the correlation for area north of 'northof' value for e/ month.
           
           returns rval,pval
           
    """
    
    pico = ncdt['prei2xco2iceb']
    pipi = ncdt['preipreiice']
    copi = ncdt['2xco2preiice']
    coco = ncdt['2xco22xco2ice']
    lat = ncdt['lat']
    
    if lin=='one':
        ice = (pico - pipi)*conv
        co2 = (copi - pipi)*conv
        ctl = pipi*conv        
        suff=''
        suff1='cold'; suff2='hi'
    elif lin=='two':
        ice = (coco - copi)*conv
        co2 = (coco - pico)*conv
        ctl = coco*conv
        suff='2'
        suff1='warm'; suff2='lo'

    combo = ice+co2
    full = (coco - pipi)*conv
    
    #print lat>northof
    rvals=np.zeros((12,))
    pvals=np.zeros_like(rvals)
    
    for moii in range(0,12):
        if vert: # lat in 2nd dim
            rvals[moii],pvals[moii] = cutl.pattcorr_pearson(combo[moii,:,lat>northof].flatten(),
                                                            full[moii,:,lat>northof].flatten())
        else: # lat in 1st dim
            rvals[moii],pvals[moii] = cutl.pattcorr_pearson(combo[moii,lat>northof,:].flatten(),
                                                            full[moii,lat>northof,:].flatten())
    
    return rvals,pvals
Exemple #2
0
def calc_linpatterncorr(ncdt,lin='one',northof=0,conv=1,vert=False):
    
    """ Computes the pattern correlation b/w the 'SUM' and 'FULL'
           for given 'lin'. Input data is seasonal avg timeseries of spatial data.
           
           computes the correlation for area north of 'northof' value.
           
           returns rval,pval
           
    """
    
    pico = ncdt['prei2xco2iceb']
    pipi = ncdt['preipreiice']
    copi = ncdt['2xco2preiice']
    coco = ncdt['2xco22xco2ice']
    lat = ncdt['lat']

    if lin=='one':
        ice = (np.mean(pico,axis=0) - np.mean(pipi,axis=0))*conv
        co2 = (np.mean(copi,axis=0) - np.mean(pipi,axis=0))*conv
        ctl = np.mean(pipi,axis=0)*conv        
        suff=''
        suff1='cold'; suff2='hi'
    elif lin=='two':
        ice = (np.mean(coco,axis=0) - np.mean(copi,axis=0))*conv
        co2 = (np.mean(coco,axis=0) - np.mean(pico,axis=0))*conv
        ctl = np.mean(coco,axis=0)*conv
        suff='2'
        suff1='warm'; suff2='lo'

    combo = ice+co2
    full = (np.mean(coco,axis=0) - np.mean(pipi,axis=0))*conv
    
    if vert: # lat in 2nd dim
        rval,pval = cutl.pattcorr_pearson(combo[:,lat>northof].flatten(),
                                          full[:,lat>northof].flatten())
    else: # lat in 1st dim
        rval,pval = cutl.pattcorr_pearson(combo[lat>northof,:].flatten(),
                                          full[lat>northof,:].flatten())
    #print cutl.pattcorr(combo[lat>northof,:].flatten(),full[lat>northof,:].flatten())
    
    return rval,pval
    fldpsea = np.zeros((4,len(lat),len(lon)))
    flddsea = np.zeros((4,len(lat),len(lon)))
    pcsea = np.zeros((4))
    pcsea2 = np.zeros((4)) # test pattcorr_pearson() @@
    pcsea2pval = np.zeros((4)) # test pattcorr_pearson()
    
    for seaii,sea in enumerate(seasons):
        fldcsea[seaii,...] = np.mean(cnc.getNCvar(fnamec,ncfield,timesel=timesel,seas=sea)*conv,axis=0)
        fldpsea[seaii,...] = np.mean(cnc.getNCvar(fnamep,ncfield,timesel=timesel,seas=sea)*conv,axis=0)
        flddsea[seaii,...] = fldpsea[seaii,...]-fldcsea[seaii,...]

        tmp = np.squeeze(flddsea[seaii,lat>latlim,...])
        tmpcmp = np.squeeze(flddcsea[seaii,lat>latlim,...])
        pcsea[seaii] = cutl.pattcorr(tmp.flatten()*weights.flatten(),
                                     tmpcmp.flatten()*weights.flatten())
        pcsea2[seaii],pcsea2pval[seaii] = cutl.pattcorr_pearson(tmp.flatten()*weights.flatten(),
                                                                tmpcmp.flatten()*weights.flatten())
        
    
    seadiffdict[skey] = flddsea        
    pcseameandict[skey] = pcsea
    pcsea2meandict[skey] = pcsea2
    pcsea2pvalmeandict[skey] = pcsea2pval


colordict = ccm.get_colordict()

# <codecell>

import pandas as pd

pcmeandf = pd.DataFrame(pcmeandict)
Exemple #4
0
def pattcorr_ensemble(ename, field, latlim=60):
    # @@@@@@@@@@@@ is this fully implemented? Don't think so. 12/2/14
    
    if ename=='ANT':
        ename='HistIC'
    elif ename=='TOT':
        ename='HistBC'

    enssims = con.build_ensemblesims(ename)
    ensnum=len(enssims)

    # ======= copied from Canam4_BCpatterncorr-Copy0.py ===========

    #ensnum=5
    diffdict = {}
    pcmeandict = {} # fldp-fldc pattern corr compared to mean BC
    pchaddict = {} # fldp-fldc pattern corr compared to hadisst
    seadiffdict = {} # seasonal mean
    pcseameandict = {}
    pcsea2meandict = {} # to test the other pattern corr calc
    pcsea2pvalmeandict = {} # to test the other pattern corr calc

    # generate weights for the pattern corr
    lat = con.get_t63lat()
    lon = con.get_t63lon()

    areas = cutl.calc_cellareas(lat,lon)
    areas = areas[lat>latlim,:]
    weights = areas / np.sum(np.sum(areas,axis=1),axis=0)

    #for eii in range(1,ensnum+1):
    for skey in enssims:

        #skey = etype + str(eii)
        #casenamec = bcasenamec + skey
        #casenamep = bcasenamep + skey
        #fnamec = basepath + casenamec+ subdir + casenamec + '_' + field + '_001-121_ts.nc'
        #fnamep = basepath + casenamep+ subdir + casenamep + '_' + field + '_001-121_ts.nc'
        fnamec,fnamep = con.build_filepathpair(skey,field)

        # monthly calc
        fldc = cnc.getNCvar(fnamec,ncfield,timesel=timesel)*conv
        fldp = cnc.getNCvar(fnamep,ncfield,timesel=timesel)*conv
        fldd = fldp-fldc

        # take the pattern correlation
        flddclimo,flddstd = cutl.climatologize(fldd) # climo first (don't need to do for BCs technically)
        flddcclimo,flddcstd = cutl.climatologize(flddc) # climo first. baseline diff data

        diffdict[skey] = flddclimo

        # for each month, compute pattern corr
        pc = np.zeros((12))
        for mii,mon in enumerate(con.get_mon()):
            tmp = np.squeeze(flddclimo[mii,lat>latlim,...])
            tmpcmp = np.squeeze(flddcclimo[mii,lat>latlim,...])
            pc[mii] = cutl.pattcorr(tmp.flatten()*weights.flatten(),tmpcmp.flatten()*weights.flatten())

        pcmeandict[skey] = pc # monthly

        # seasonal calc    
        fldcsea = np.zeros((4,len(lat),len(lon)))
        fldpsea = np.zeros((4,len(lat),len(lon)))
        flddsea = np.zeros((4,len(lat),len(lon)))
        pcsea = np.zeros((4))
        pcsea2 = np.zeros((4)) # test pattcorr_pearson() @@
        pcsea2pval = np.zeros((4)) # test pattcorr_pearson()

        for seaii,sea in enumerate(seasons):
            fldcsea[seaii,...] = np.mean(cnc.getNCvar(fnamec,ncfield,timesel=timesel,seas=sea)*conv,axis=0)
            fldpsea[seaii,...] = np.mean(cnc.getNCvar(fnamep,ncfield,timesel=timesel,seas=sea)*conv,axis=0)
            flddsea[seaii,...] = fldpsea[seaii,...]-fldcsea[seaii,...]

            tmp = np.squeeze(flddsea[seaii,lat>latlim,...])
            tmpcmp = np.squeeze(flddcsea[seaii,lat>latlim,...])
            pcsea[seaii] = cutl.pattcorr(tmp.flatten()*weights.flatten(),
                                         tmpcmp.flatten()*weights.flatten())
            pcsea2[seaii],pcsea2pval[seaii] = cutl.pattcorr_pearson(tmp.flatten()*weights.flatten(),
                                                                    tmpcmp.flatten()*weights.flatten())


        seadiffdict[skey] = flddsea        
        pcseameandict[skey] = pcsea
        pcsea2meandict[skey] = pcsea2
        pcsea2pvalmeandict[skey] = pcsea2pval