コード例 #1
0
 def testBootstrap(self):
     crpss_dict = self.crpssDict()
     crpss_dict['bootstrapSwitch'] = True
     crpss_dict['bootstrap_number'] = 5
     crpss = Crpss(**crpss_dict)
     crpss.prepareInput()
     crpss.analyze()
コード例 #2
0
    def testCrpss(self):
        crpss_dict = self.crpssDict()
        crpss = Crpss(**crpss_dict)
        crpss.prepareInput()
        crpss.analyze()
        
        #test file names
        res_files = [f for r,_,files in os.walk(self.tmp_dir+'/output') for f in files]
        test_files = [f for r,_,files in os.walk(self.test_path+'/output') for f in files]
        self.assertEqual(sorted(res_files),sorted(test_files))
        res_files = [f for r,_,files in os.walk(self.tmp_dir+'/plots') for f in files]
        test_files = [f for r,_,files in os.walk(self.test_path+'/plots') for f in files]
        self.assertEqual(sorted(res_files),sorted(test_files))

        #test values of all .nc files
        res_files = sorted([os.path.join(r,f) for r,_,files in os.walk(self.tmp_dir+'/output') for f in files])
        test_files = sorted([os.path.join(r,f) for r,_,files in os.walk(self.test_path+'/output') for f in files])
        for i,f in enumerate(res_files):
            
            t1 = FileHandler.openNetCDFFile(res_files[i])
            t2 = FileHandler.openNetCDFFile(test_files[i])

            np.testing.assert_array_almost_equal(t1['variable'], t2['variable'], 3)
            #elf.assertTrue((t1['variable']==t2['variable']).all())
            self.assertTrue((t1['lon']==t2['lon']).all())
            self.assertTrue((t1['lat']==t2['lat']).all())
コード例 #3
0
 def testMaxLeadYearHistorical(self):
     crpss_dict = self.crpssDict()
     crpss_dict['decadals'] = range(1990,2000,5)
     crpss_dict['project'] = 'cmip5'
     crpss_dict['product1'] = 'output1'
     crpss_dict['leadtimes'] = '1,2'
     crpss_dict['experiment'] = 'historical'
     crpss = Crpss(**crpss_dict)
     crpss.prepareInput()
     crpss.analyze()
コード例 #4
0
 def testEnsemblemembers(self):
      
     crpss_dict = self.crpssDict()
     crpss_dict['ensemblemembers'] = 'r2i1p1,r3i1p1'
     crpss = Crpss(**crpss_dict)
     crpss.prepareInput()
     crpss.analyze()
      
     for year in crpss_dict['decadals']:
         self.assertTrue(len(crpss.inputDict[year]) == 2, 'Too many ensemblemembers found!')
コード例 #5
0
ファイル: crpss_test.py プロジェクト: wking/murcss
    def testErrors(self):
        crpss_dict = self.crpssDict()                 
        crpss_dict['variable'] = 'pr'
        crpss = Crpss(**crpss_dict)
        self.assertRaises(NoFilesFoundError, crpss.prepareInput)
        crpss_dict['variable'] = 'tas'    
        crpss_dict['observation'] = 'merra'
        crpss = Crpss(**crpss_dict)
        self.assertRaises(NotEnoughYearsInFile, crpss.prepareInput)
        crpss_dict['observation'] = 'HadCrut'
        crpss_dict['project'] = 'cmip5'
        crpss_dict['experiment'] = 'hist*'
        crpss_dict['product1'] = 'output1'
        crpss = Crpss(**crpss_dict)
        self.assertRaises(NoFilesFoundError, crpss.prepareInput)
 
        crpss_dict = self.crpssDict()
        crpss_dict['ensemblemembers'] = 'r1i1p1'
        crpss = Crpss(**crpss_dict)
        crpss.prepareInput()
        self.assertRaises(NotEnoughEnsemblemembersFound, crpss.analyze)
コード例 #6
0
ファイル: crpss_test.py プロジェクト: wking/murcss
    def testErrors(self):
        crpss_dict = self.crpssDict()
        crpss_dict['variable'] = 'pr'
        crpss = Crpss(**crpss_dict)
        self.assertRaises(NoFilesFoundError, crpss.prepareInput)
        crpss_dict['variable'] = 'tas'
        crpss_dict['observation'] = 'merra'
        crpss = Crpss(**crpss_dict)
        self.assertRaises(NotEnoughYearsInFile, crpss.prepareInput)
        crpss_dict['observation'] = 'HadCrut'
        crpss_dict['project'] = 'cmip5'
        crpss_dict['experiment'] = 'hist*'
        crpss_dict['product1'] = 'output1'
        crpss = Crpss(**crpss_dict)
        self.assertRaises(NoFilesFoundError, crpss.prepareInput)

        crpss_dict = self.crpssDict()
        crpss_dict['ensemblemembers'] = 'r1i1p1'
        crpss = Crpss(**crpss_dict)
        crpss.prepareInput()
        self.assertRaises(NotEnoughEnsemblemembersFound, crpss.analyze)
コード例 #7
0
def main(argv=None): # IGNORE:C0111
    '''Command line options.'''
    if argv is None:
       argv = sys.argv[1:]
    args, lastargs = getopt.getopt(argv, _short_args, _args)
    
    for flag,arg in args:
        if flag=='-h' or flag=='--help':
            return printHelp()
    
    murcss_dict = getMurcssDict()
    for arg in lastargs:
        if '=' not in arg:
            raise CommandError("Invalid format for query: %s" % arg)
            
        items = arg.split('=')
        key, value = items[0], ''.join(items[1:])
        murcss_dict[key] = value
            
    murcss_dict['decadals'] = map(int,murcss_dict['decadals'].split(','))
    murcss_dict['bootstrap_number'] = int(murcss_dict['bootstrap_number'])
    
    analysis_type = murcss_dict.pop('analysis_type')
    if analysis_type == 'map':
        murcss_dict['fieldmean'] = False
        murcss_dict['zonalmean'] = False
    elif analysis_type == 'fieldmean':
        murcss_dict['fieldmean'] = True
        murcss_dict['zonalmean'] = False
    elif analysis_type == 'zonalmean':
        murcss_dict['fieldmean'] = False
        murcss_dict['zonalmean'] = True     

    output_type = murcss_dict.pop('output_type')
    if output_type == 'basic':
        murcss_dict['basic_output'] = True
    else:
        murcss_dict['basic_output'] = False

    #Check for right metics value
    metrics = murcss_dict.pop('metrics')
    if metrics not in ['all','accuracy','ensemble_spread']:
        raise Exception, '%s is not a valid option. Only valid options for metric are: "all", "ensemble_spread", and "accuracy".' % (metrics)
    
    if metrics in ['all','accuracy']:
        print '#######################'
        print 'Calculating the MSSS'
        print '#######################'
        
        #Calculation of MSESS
        if(not murcss_dict['significance']):
            msss_dict = murcss_dict.copy()
            msss_dict.pop('bootstrap_number')
            msss_dict.pop('significance')
            msss = Msss(**msss_dict)
            msss.prepareInput()
            msss.analyze()   
            msss.deleteCache()
        else:
            from metrics.msssBootstrap import main
            msss = main(murcss_dict.copy(),'..')
    
    if metrics in ['all','ensemble_spread']:
        print '#######################'
        print 'Calculating the CRPSS for Model1'
        print '#######################'
        crpss1 = Crpss(output=murcss_dict['output'], 
                           output_plots=murcss_dict['output_plots'], 
                           basic_output=murcss_dict['basic_output'],
                           decadals=murcss_dict['decadals'],
                           variable=murcss_dict['variable'], 
                           
                           project = murcss_dict['project1'],
                           product1=murcss_dict['product1'], 
                           institute1=murcss_dict['institute1'], 
                           model=murcss_dict['model1'], 
                           experiment=murcss_dict['experiment1'],
                           ensemblemembers=murcss_dict['ensemblemembers1'], 
                           
                           observation = murcss_dict['observation'], 
                           leadtimes=murcss_dict['leadtimes'],
                           result_grid=murcss_dict['result_grid'], 
                           
                           maskMissingValues=murcss_dict['maskMissingValues'], 
                           bootstrapSwitch=murcss_dict['significance'], 
                           bootstrap_number=murcss_dict['bootstrap_number'],
                           level=murcss_dict['level'], 
                           lonlatbox=murcss_dict['lonlatbox'], 
                           fieldmean=murcss_dict['fieldmean'],
                           zonalmean=murcss_dict['zonalmean'],
                           cache=murcss_dict['cache'], 
                           
                           baseDir = murcss_dict['baseDir'])
        if metrics != 'ensemble_spread':
            crpss1.outputDir = msss.outputDir
            crpss1.outputPlots = msss.outputPlots
        crpss1.prepareInput()
        crpss1.analyze()
        crpss1.deleteCache()
        print '#######################'
        print 'Calculating the CRPSS for Model2'
        print '#######################'    
        crpss2 = Crpss(output=murcss_dict['output'], 
                           output_plots=murcss_dict['output_plots'], 
                           basic_output=murcss_dict['basic_output'],
                           decadals=murcss_dict['decadals'],
                           variable=murcss_dict['variable'], 
                           
                           project = murcss_dict['project2'],
                           product1=murcss_dict['product2'], 
                           institute1=murcss_dict['institute2'], 
                           model=murcss_dict['model2'], 
                           experiment=murcss_dict['experiment2'],
                           ensemblemembers=murcss_dict['ensemblemembers2'], 
                           
                           observation = murcss_dict['observation'], 
                           leadtimes=murcss_dict['leadtimes'],
                           result_grid=murcss_dict['result_grid'], 
                           
                           maskMissingValues=murcss_dict['maskMissingValues'], 
                           bootstrapSwitch=murcss_dict['significance'], 
                           bootstrap_number=murcss_dict['bootstrap_number'],
                           level=murcss_dict['level'], 
                           lonlatbox=murcss_dict['lonlatbox'], 
                           fieldmean=murcss_dict['fieldmean'],
                           zonalmean=murcss_dict['zonalmean'],
                           cache=murcss_dict['cache'], 
                           input_part='input2',
                           baseDir = murcss_dict['baseDir'])
        if metrics != 'ensemble_spread':
            crpss2.outputDir = msss.outputDir
            crpss2.outputPlots = msss.outputPlots
        crpss2.prepareInput()
        crpss2.analyze()
        crpss2.deleteCache()    

    import metrics.msss, metrics.metricAbstract, metrics.filehandler, metrics.taylorplot, metrics.crpss, metrics.msssBootstrap
    del metrics.msss.cdo, metrics.metricAbstract.cdo, metrics.filehandler.cdo, metrics.taylorplot.cdo, metrics.crpss.cdo, metrics.msssBootstrap.cdo
    print 'Calculation finished.'
    print 'Plots produced in %s' %(msss.outputPlots,)