コード例 #1
0
    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.deleteCache()
        crpss = Crpss(**crpss_dict)
        #crpss.prepareInput()
        self.assertRaises(NotEnoughEnsemblemembersFound, crpss.prepareInput)#crpss.analyze)
コード例 #2
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,)