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)
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,)