Changeset 347


Ignore:
Timestamp:
05/11/04 12:57:38 (15 years ago)
Author:
selatham
Message:

Incorporates changes by selatham and Ag Stephens. as of 5/11/04.

Location:
nappy/trunk
Files:
4 added
18 edited

Legend:

Unmodified
Added
Removed
  • nappy/trunk/__init__.py

    r345 r347  
    2424from naFile3010 import * 
    2525from naFile4010 import * 
    26 from naToCdms import * 
    2726try: 
     27    from naToCdms import * 
    2828    from cdms2na import * 
    2929except: 
    30     print "Warning : cannot import cdms2na (cdms) package, CDAT-dependent features will not work." 
     30    print "Could not locate CDAT for NASA Ames to Cdms conversions." 
  • nappy/trunk/cdms2na.py

    r343 r347  
    1111===== 
    1212 
    13     cdms2na.py <infilename> <outfilename> [<options>] 
     13    cdms2na.py [<options>] -i <infilename> -o <outfilename>  
    1414 
    1515Where 
     
    1818    infilename  - name of input file (NetCDF). 
    1919    outfilename - name of output file (NASA Ames). 
    20     options     - list of options [Not yet implemented]. 
     20    options     - list of options [NOT YET IMPLEMENTED]. 
    2121     
    2222""" 
    2323 
    2424# Imports from python standard library 
    25 import sys, os, time, string, fileinput 
     25import sys, os, time, string, fileinput, re 
    2626sys.path.append("..") 
    2727 
     
    3838import version 
    3939import general 
     40import localRules 
    4041from naCore import * 
    4142from naError import * 
     
    106107 
    107108def getBestName(var):   
    108     """Returns the most appropriate variable name for a NASA Ames header""" 
     109    """ 
     110    Returns the most appropriate variable name for a NASA Ames header 
     111    """ 
    109112    if hasattr(var, "id"): name=var.id 
    110113    if hasattr(var, "name"): name=var.name 
    111114    if hasattr(var, "long_name"): name=var.long_name 
    112115    if hasattr(var, "standard_name"): name=var.standard_name 
    113     if hasattr(var, "units"): name="%s (%s)" % (name, var.units) 
     116    if hasattr(var, "units") and not re.match("^\s+$", var.units): name="%s (%s)" % (name, var.units)     
     117    # Do a check to see units are not duplicated 
     118    match=re.match("(.*\(%s\)\s*)\(%s\)(.*)$" % (var.units, var.units), name) 
     119    if match: 
     120        name=match.groups()[0]+match.groups()[1] 
     121         
     122    if name[-2:]=="()": name=name[:-2] 
    114123    return name 
    115124 
     
    126135    for line in lines: 
    127136        count=count+1 
    128         if line=="***Data Section begins on the next line***\n": 
     137        if line=="###Data Section begins on the next line###\n": 
    129138            break 
    130139    # Now replace 1st line NLHEAD with count 
     
    141150 
    142151def cdms2na(infilename, outfilename, variable=None, ffi="automatic", rules=None): 
     152    print "Reading data from: %s" % infilename 
    143153    cdmsfile=cdms.open(infilename) 
    144154    globals=cdmsfile.attributes 
     
    149159    else: 
    150160        vars=[cdmsfile(variable)] 
     161 
     162    # Re-order variables if they have the attribute 'nasa_ames_var_number' 
     163    orderedVars=[None]*1000 
     164    otherVars=[] 
     165    for var in vars: 
     166        varMetadata=cdmsfile[var] 
     167        if hasattr(varMetadata, "nasa_ames_var_number"): 
     168            num=varMetadata.nasa_ames_var_number 
     169            orderedVars[num]=var 
     170        else: 
     171            otherVars.append(var) 
     172     
     173    vars=[] 
     174    for var in orderedVars: 
     175        if var!=None: 
     176            vars.append(var) 
     177             
     178    vars=vars+otherVars 
     179     
    151180    builder=CdmsToNABuilder(vars, globals) 
    152181    #print builder.naDict["X"] 
     182     
     183    print "\nWriting output NASA Ames file: %s" % outfilename 
    153184    general.openNAFile(outfilename, 'w', builder.naDict) 
    154185    nlhead=fixHeaderLength(outfilename)    
    155     print "%s written successfully." % outfilename 
     186    print "\nNASA Ames file written successfully: %s" % outfilename 
    156187 
    157188 
    158189class CdmsToNABuilder(NACore): 
    159  
     190    """ 
     191    Class to build a NASA Ames File object from a set of  
     192    CDMS variables and global attributes (optional). 
     193    """ 
     194     
    160195    def __init__(self, vars, global_attributes={}): 
     196        """ 
     197        Sets up instance variables and calls appropriate methods to 
     198        generate sections of NASA Ames file object. 
     199        """ 
    161200        self.naDict={} 
    162201        self.vars=vars 
    163202        self.globals=global_attributes 
    164         (vars, auxVars)=self.analyseVariables() 
     203        (self.orderedVars, auxVars)=self.analyseVariables() 
    165204        self.naDict["NLHEAD"]="-999" 
    166         self.defineNAVars(vars) 
     205        self.defineNAVars(self.orderedVars) 
    167206        self.defineNAAuxVars(auxVars) 
    168207        self.defineNAGlobals() 
     
    173212 
    174213    def analyseVariables(self): 
    175         vars4NA=[self.vars[0]] 
     214        """ 
     215        Method to examine the content of CDMS variables to return 
     216        a tuple of two lists containing variables and auxiliary variables 
     217        for the NASA Ames file object. 
     218        """ 
     219        # Get largest ranked variable as the one we use as standard 
     220        rank=0 
     221        count=0 
     222        for var in self.vars: 
     223            count=count+1 
     224            if var.rank()>rank: 
     225                rank=var.rank() 
     226                bestVar=var 
     227                bestVarIndex=count 
     228            elif var.rank()==rank: 
     229                if len(var.flat)>len(bestVar.flat): 
     230                    bestVar=var 
     231                    bestVarIndex=count 
     232                 
     233        vars4NA=[bestVar] 
    176234        auxVars4NA=[] 
    177         shape=self.vars[0].shape 
     235        shape=bestVar.shape 
    178236        ndims=len(shape) 
    179237        self.naDict["NIV"]=ndims 
     
    189247            else: 
    190248                self.naDict["FFI"]=1001 
    191  
    192         axes=self.vars[0].getAxisList() 
     249        print self.naDict["FFI"] 
     250        axes=bestVar.getAxisList() 
    193251         
    194252        # Get other variable info 
    195         for var in self.vars[1:]: 
     253        for var in self.vars[:bestVarIndex]+self.vars[bestVarIndex:]: 
    196254            if len(var.shape)!=ndims or var.shape!=shape:  
    197255                # Could it be an auxiliary variable  
     
    208266                # OK, I think they are compatible 
    209267                vars4NA.append(var) 
    210  
     268                 
     269        # Re-order if they previously came from NASA Ames files (i.e. including  
     270        # the attribute 'nasa_ames_var_number') 
     271        orderedVars=[None]*1000 
     272        otherVars=[] 
     273        for var in vars4NA: 
     274            if hasattr(var, "nasa_ames_var_number"): 
     275                orderedVars[var.nasa_ames_var_number[0]]=var 
     276            else: 
     277                otherVars.append(var) 
     278        # Remake vars4NA now in order 
     279        vars4NA=[] 
     280        for var in orderedVars: 
     281            if var!=None: vars4NA.append(var) 
     282        vars4NA=vars4NA+otherVars 
     283 
     284        # Now re-order the Auxiliary variables if they previously came from NASA  
     285        # Ames files (i.e. including the attribute 'nasa_ames_aux_var_number') 
     286 
     287        orderedAuxVars=[None]*1000 
     288        otherAuxVars=[] 
     289        for var in auxVars4NA: 
     290            if hasattr(var, "nasa_ames_aux_var_number"): 
     291                orderedAuxVars[var.nasa_ames_aux_var_number[0]]=var 
     292            else: 
     293                otherAuxVars.append(var) 
     294        # Remake auxVars4NA now in order 
     295        auxVars4NA=[] 
     296        for var in orderedAuxVars: 
     297            if var!=None: auxVars4NA.append(var) 
     298        auxVars4NA=auxVars4NA+otherAuxVars       
    211299        return (vars4NA, auxVars4NA) 
    212300 
    213301    def defineNAVars(self, vars): 
     302        """ 
     303        Method to define NASA Ames file object variables and their 
     304        associated metadata. 
     305        """ 
    214306        self.naDict["NV"]=len(vars) 
    215307        self.naDict["VNAME"]=[] 
     
    255347 
    256348    def defineNAAuxVars(self, auxVars): 
     349        """ 
     350        Method to define NASA Ames file object auxiliary variables and their 
     351        associated metadata. 
     352        """ 
    257353        self.naDict["NAUXV"]=len(auxVars) 
    258354        self.naDict["ANAME"]=[] 
     
    265361            miss=getMissingValue(var) 
    266362            if type(miss)!=float:  miss=miss[0] 
    267             self.naDict["SMISS"].append(miss) 
     363            self.naDict["AMISS"].append(miss) 
    268364            self.naDict["ASCAL"].append(1) 
    269365            # AND THE ARRAY 
     
    276372 
    277373    def getAxisDefinition(self, axis): 
     374        """ 
     375        Method to create the appropriate NASA Ames file object  
     376        items associated with an axis (independent variable in  
     377        NASA Ames). 
     378        """ 
    278379        self.naDict["NX"].append(len(axis)) 
    279380        self.naDict["XNAME"].append(getBestName(axis)) 
    280381        # If only one item in axis values 
    281         if len(axis)==1: 
     382        if len(axis)<3: 
    282383            self.naDict["DX"].append(0) 
    283384            self.naDict["NXDEF"].append(len(axis)) 
     
    299400 
    300401    def defineNAGlobals(self): 
    301         globalmap=cdmsMap.cdmsMap["toNA"] 
    302         self.extra_comments=[] 
     402        """ 
     403        Maps CDMS (NetCDF) global attributes into NASA Ames Header fields. 
     404        """ 
     405        # Get the global mapping dictionary 
     406        globalmap=cdmsMap.toNA 
     407        # Check if we should add to it with locally set rules 
     408        locGlobs=localRules.localGlobalAttributes 
     409        for att in locGlobs.keys(): 
     410            if not globalmap.has_key(att): 
     411                globalmap[key]=locGlobs[key] 
     412 
     413        self.extra_comments=[[],[],[]]  # Normal comments, special comments, other comments 
    303414        for key in self.globals.keys(): 
    304             if type(self.globals[key]) not in (str, float, int): continue 
     415            if key!="first_valid_date_of_data" and type(self.globals[key]) not in (str, float, int): continue 
    305416            if key in globalmap.keys(): 
    306417                if key=="history": 
     
    310421                     
    311422                elif key=="institution": 
    312                     self.naDict["ONAME"]=self.globals[key] 
    313                     self.naDict["ORG"]=self.globals[key] 
     423                    # If fields came from NA then extract appropriate fields. 
     424                    match=re.match(r"(.*)\s+\(ONAME from NASA Ames file\);\s+(.*)\s+\(ORG from NASA Ames file\)\.", self.globals[key]) 
     425                    if match: 
     426                        self.naDict["ONAME"]=match.groups()[0] 
     427                        self.naDict["ORG"]=match.groups()[1] 
     428                    else: 
     429                        self.naDict["ONAME"]=self.globals[key] 
     430                        self.naDict["ORG"]=self.globals[key]                 
     431                                     
    314432                elif key=="comment": 
    315                     self.ncom=[self.globals[key]] 
     433                    # Need to work out if they are actually comments from NASA Ames in the first place 
     434                    #self.ncom=[self.globals[key]] 
     435                    comLines=self.globals[key].split("\n") 
     436                    normComms=[] 
     437                    normCommFlag=None 
     438                    specComms=[] 
     439                    specCommFlag=None 
     440                    for line in comLines: 
     441                        if line.find("###NASA Ames Special Comments follow###")>-1: 
     442                            specCommFlag=1 
     443                        elif line.find("###NASA Ames Special Comments end###")>-1: 
     444                            specCommFlag=None 
     445                        elif line.find("###NASA Ames Normal Comments follow###")>-1: 
     446                            normCommFlag=1 
     447                        elif line.find("###NASA Ames Normal Comments end###")>-1: 
     448                            normCommFlag=None    
     449                        elif specCommFlag==1: 
     450                            specComms.append(line) 
     451                        elif normCommFlag==1: 
     452                            normComms.append(line) 
     453                        elif line.find("###Data Section begins on the next line###")>-1: 
     454                            pass 
     455                        else: 
     456                            normComms.append(line)           
     457                     
     458                    self.extra_comments=[specComms, normComms, []]                   
     459                                     
     460                elif key=="first_valid_date_of_data": 
     461                    self.naDict["DATE"]=self.globals[key] 
     462                 
    316463                elif key in ("Conventions", "references"): 
    317464                    pass 
     
    319466                    self.naDict[globalmap[key]]=self.globals[key] 
    320467            else: 
    321                 self.extra_comments.append("%s:   %s" % (key, self.globals[key])) 
     468                self.extra_comments[2].append("%s:   %s" % (key, self.globals[key])) 
    322469        return 
    323470 
    324471 
    325472    def defineNAComments(self, normal_comments=[], special_comments=[]): 
    326         NCOM=["***NASA Ames Normal Comments follow***"] 
     473        """ 
     474        Defines the Special and Normal comments sections in the NASA Ames file  
     475        object - including information gathered from the defineNAGlobals method. 
     476        """ 
     477         
    327478        if hasattr(self, "ncom"):  normal_comments=self.ncom+normal_comments 
     479        NCOM=[] 
    328480        for ncom in normal_comments: 
    329481            NCOM.append(ncom) 
    330         NCOM.append("") 
    331         NCOM.append("Additional Global Attributes defined in Cdmsfile and not translated elsewhere:") 
    332  
    333         if hasattr(self, "extra_comments"): 
    334             for excom in self.extra_comments: 
     482        if len(NCOM)>0:   NCOM.append("") 
     483         
     484        if len(self.extra_comments[2])>0: 
     485            for excom in extra_comments[2]: 
     486                NCOM.append(excom) 
     487         
     488        if len(self.extra_comments[1])>0:   
     489            NCOM.append("Additional Global Attributes defined in the source file and not translated elsewhere:") 
     490            for excom in self.extra_comments[1]: 
    335491                NCOM.append(excom) 
    336492 
     
    338494            for h in self.history: 
    339495                NCOM.append(h) 
    340  
    341         NCOM.append("") 
    342         NCOM.append("***Data Section begins on the next line***") 
    343  
    344         SCOM=["***NASA Ames Special Comments follow***"] 
     496         
     497        if len(NCOM)>0: 
     498            NCOM.insert(0, "###NASA Ames Normal Comments follow###") 
     499            NCOM.append("") 
     500            NCOM.append("###NASA Ames Normal Comments end###") 
     501        NCOM.append("###Data Section begins on the next line###") 
     502 
     503        specCommentsFlag=None 
     504        SCOM=[] 
     505        special_comments=self.extra_comments[0] 
     506        if len(special_comments)>0:  
     507            SCOM=["###NASA Ames Special Comments follow###"] 
     508            specCommentsFlag=1 
    345509        for scom in special_comments: 
    346510            SCOM.append(scom) 
    347511 
    348         SCOM.append("Additional Variable Attributes defined in Cdmsfile and not translated elsewhere:") 
    349         used_var_atts=("name", "long_name", "standard_name", "id", "missing_value", "fill_value", "units") 
     512 
     513        used_var_atts=("name", "long_name", "standard_name", "id",  
     514                "missing_value", "fill_value", "units",  
     515                "nasa_ames_var_number", "nasa_ames_aux_var_number") 
     516        varCommentsFlag=None 
     517 
     518        for var in self.orderedVars: 
     519            varflag="unused" 
     520            name=getBestName(var) 
     521            for scom in var.attributes.keys(): 
     522                if type(scom) in (str, float, int) and scom not in used_var_atts: 
     523                    if varflag=="unused": 
     524                        if varCommentsFlag==None: 
     525                            varCommentsFlag=1 
     526                            if specCommentsFlag==None: 
     527                                SCOM=["###NASA Ames Special Comments follow###"] 
     528                            SCOM.append("Additional Variable Attributes defined in the source file and not translated elsewhere:") 
     529                            SCOM.append("###Variable attributes from source (NetCDF) file follow###") 
     530                        varflag=="using"  
     531                        SCOM.append("\tVariable (%s): %s" % (var.id, name)) 
     532                    SCOM.append("\t\t%s = %s" % (scom, var.attributes[scom])) 
     533        if varCommentsFlag==1:  SCOM.append("###Variable attributes from source (NetCDF) file end###") 
     534        if specCommentsFlag==1: 
     535            SCOM.append("###NASA Ames Special Comments end###") 
     536 
     537        """used_var_atts=("name", "long_name", "standard_name", "id", "missing_value", "fill_value", "units") 
    350538        for var in self.vars: 
    351539            for scom in var.attributes.keys(): 
    352540                name=getBestName(var) 
    353541                if type(scom) in (str, float, int) and scom not in used_var_atts: 
    354                     SCOM.append("\t%s: %s - %s" % (name, scom, var.attributes[scom])) 
    355  
    356         self.naDict["NCOM"]=NCOM 
    357         self.naDict["NNCOML"]=len(NCOM) 
    358         self.naDict["SCOM"]=SCOM 
    359         self.naDict["NSCOML"]=len(SCOM) 
     542                    SCOM.append("\t%s: %s - %s" % (name, scom, var.attributes[scom]))""" 
     543 
     544        # Strip out empty lines (or returns) 
     545        NCOM_cleaned=[] 
     546        SCOM_cleaned=[] 
     547        for c in NCOM: 
     548            if c.strip() not in ("", " ", "  "): NCOM_cleaned.append(c) 
     549        for c in SCOM: 
     550            if c.strip() not in ("", " ", "  "): SCOM_cleaned.append(c) 
     551 
     552        self.naDict["NCOM"]=NCOM_cleaned 
     553        self.naDict["NNCOML"]=len(self.naDict["NCOM"]) 
     554        self.naDict["SCOM"]=SCOM_cleaned 
     555        self.naDict["NSCOML"]=len(self.naDict["SCOM"]) 
    360556        return 
    361557 
    362558    def defineGeneralHeader(self, header_items={}): 
    363         """Defines known header items and overwrites any with header_items key/value pairs.""" 
    364         self.naDict["DATE"]=time.strftime("%Y %m %d", time.localtime(time.time())).split() 
     559        """ 
     560        Defines known header items and overwrites any with header_items  
     561        key/value pairs. 
     562        """ 
     563        # Check if DATE field previously known in NASA Ames file 
     564        time_now=time.strftime("%Y %m %d", time.localtime(time.time())).split() 
     565        if not self.naDict.has_key("RDATE"): 
     566            self.naDict["RDATE"]=time_now 
     567         
    365568        if self.ax0.isTime(): 
    366569            # Get first date in list 
    367             (unit, start_date)=re.match("(\w+)\s+?since\s+?(\d+-\d+-\d+)", self.ax0.units).groups() 
    368              
    369             comptime=cdtime.s2c(start_date) 
    370             first_day=comptime.add(self.naDict["X"][0][0], getattr(cdtime, unit.capitalize())) 
    371             self.naDict["RDATE"]=string.replace(str(first_day).split(" ")[0], "-", " ").split() 
     570            try: 
     571                (unit, start_date)=re.match("(\w+)\s+?since\s+?(\d+-\d+-\d+)", self.ax0.units).groups()             
     572                comptime=cdtime.s2c(start_date) 
     573                first_day=comptime.add(self.naDict["X"][0][0], getattr(cdtime, unit.capitalize())) 
     574                self.naDict["DATE"]=string.replace(str(first_day).split(" ")[0], "-", " ").split() 
     575            except: 
     576                print "Nappy Warning: Could not get the first date in the file. You will need to manually edit the output file." 
     577                self.naDict["DATE"]="<DATE_UNKNOWN>" 
    372578        else:  
    373             self.naDict["RDATE"]=self.naDict["DATE"] 
     579            if not self.naDict.has_key("DATE"): 
     580                print "Nappy Warning: Could not get the first date in the file. You will need to manually edit the output file." 
     581                self.naDict["DATE"]="<DATE_UNKNOWN>" 
    374582        self.naDict["IVOL"]=1 
    375583        self.naDict["NVOL"]=1 
     
    383591 
    384592    args=sys.argv[1:] 
    385     if len(args)<2: 
     593    if len(args)<4: 
    386594        print helpMessage 
    387595        print "Incorrect number of arguments used." 
    388596        sys.exit() 
    389     elif len(args)==3: 
    390         cdms2na(args[0], args[1], args[2])  
    391     else: 
    392         cdms2na(args[0], args[1])  
     597         
     598    for arg in args: 
     599        if arg=="-i": 
     600            infile=args[args.index(arg)+1] 
     601        elif arg=="-o": 
     602            outfile=args[args.index(arg)+1] 
     603 
     604    cdms2na(infile, outfile)  
  • nappy/trunk/cdmsMap.py

    r339 r347  
    88""" 
    99 
    10 cdmsMap={"toNA":{"Conventions":None, 
     10toNA={"Conventions":None, 
    1111                "source":"SNAME", 
    1212                "title":"MNAME", 
     
    1919                "total_files_in_set":"NVOL", 
    2020                "file_number_in_set":"IVOL", 
    21                 "first_valid_date_of_data":"DATE"}, 
    22         "fromNA":{"NLHEAD":"no_of_nasa_ames_header_lines", 
     21                "first_valid_date_of_data":"DATE"} 
     22fromNA={"NLHEAD":"no_of_nasa_ames_header_lines", 
    2323                   "FFI":"file_format_index", 
    2424                   ("ONAME", "ORG"):"institution", 
     
    2929                   "RDATE":"history", 
    3030                   "DATE":"first_valid_date_of_data", 
    31                    ("SCOM", "NCOM"):"comment"}} 
     31                   ("SCOM", "NCOM"):"comment"} 
    3232 
  • nappy/trunk/data_files/1010.na

    r345 r347  
    1 41 1010 
    2 Mertz, Fred 
    3 Pacific University 
    4 DC-8 Mark IV Interferometer 
    5 TAHITI OZONE PROJECT 
    6 1  1 
    7 1991  1 16   1991  2 15 
    8 0 
    9 UT fractional day number of year given in DATE 
    10 8 
    11 1.0E+17 1.0E+14 1.0E+13 1.0E+14 1.0E+14 1.0E+13 1.0E+13 1.0E+18 
    12 999 999 9999 9999 999 9999 9999 9999 
    13 O3 column density (molecules/cm**2) 
    14 NO column density (molecules/cm**2) 
    15 NO2 column density (molecules/cm**2) 
    16 HNO3 column density (molecules/cm**2) 
    17 ClNO3 column density (molecules/cm**2) 
    18 HCl column density (molecules/cm**2) 
    19 HF column density (molecules/cm**2) 
    20 H2O column density (molecules/cm**2) 
     146  1010 
     2De Rudder, Anne 
     3Rutherford Appleton Laboratory, Chilton OX11 0QX, UK - Tel.: +44 (0) 1235 445837 
     4BISA 1-D atmospheric model 
     5NERC Data Grid (NDG) project 
     63  13 
     71976 01 01  2002 10 30 
     85 
     9Altitude (km) 
     104 
     111.E+12  1.E+06  1.E+04  1 
     121.E+08  1.E+08  1.E+08  10000 
     13Molecular oxygen concentration (cm-3) 
     14Ozone concentration (cm-3) 
     15O(3P) concentration (cm-3) 
     16O(1D) concentration (cm-3) 
     172 
     181      1.E+12 
     1910000  1.E+08 
     20Pressure (hPa) 
     21Air concentration (cm-3) 
    212210 
    22 1.0 1.0 1.0 1.0 0.1 0.1 0.1 1.0 1.0 1.0 
    23 99 99 99 99 9999 99999 9999 999 999 999 
    24 UT Month 
    25 UT Day 
    26 UT Hour 
    27 UT Minutes 
    28 Latitude of DC-8 (degrees) 
    29 Longitude of DC-8 (degrees) 
    30 Solar zenith angle (degrees) reckoned from DC-8 
    31 Air temperature (Celsius) 
    32 Static pressure (millibars) 
    33 Potential temperature (Kelvin) 
    34 0 
    35 6 
    36 NOTE 1: This is a single file for the entire mission, which will 
    37 be updated after each flight during the mission.  See line 7 of 
    38 header for date of last update. 
    39 NOTE 2: All these column values will change when analyses are 
    40 repeated. 
     23Example of FFI 1010. 
     24This example illustrating NASA Ames file format index 1010 combines the US Standard 
     25Atmosphere 1976 (for the auxiliary variables Pressure and Air Concentration) and some 
     26results of a 1-D model (for the dependent variables - oxygen compounds concentrations), 
     27as quoted in G. Brasseur and S. Solomon, Aeronomy of the Middle Atmosphere, 
     28Reidel, 1984 (pp. 46 & 211). The first date on line 7 (1st of January 1976) is fictitious 
     29since the parameters are yearly averages. We have signalled the absence of calculated 
     30value at 30 km by using the "missing value" flags (see line 12). The missing value flag 
     31is also used to give account for the fact that there is virtually no O(1D) present below 
     32the altitude of 20 km. 
     3312 
     3412 
     35The files included in this data set illustrate each of the 9 NASA Ames file format indices 
     36(FFI). A detailed description of the NASA Ames format can be found on the Web site of the 
     37British Atmospheric Data Centre (BADC) at http://www.badc.rl.ac.uk/help/formats/NASA-Ames/ 
     38E-mail contact: badc@rl.ac.uk 
     39Reference: S. E. Gaines and R. S. Hipskind, Format Specification for Data Exchange, 
     40Version 1.3, 1998. The work referenced above can be found at 
     41http://cloud1.arc.nasa.gov/solve/archiv/archive.tutorial.html and a copy of it at 
     42http://www.badc.rl.ac.uk/help/formats/NASA-Ames/G-and-H-June-1998.html 
    4143 
    42 16.521  1 16 12 30  -59 -1250  884 -56 237 328 
    43 80  24   75  142  12  240   72   47 
    44 16.538  1 16 12 55  -60 -1211  885 -57 237 328 
    45 70  19   82  121  12  243   72   56 
    46 16.558  1 16 13 24  -64 -1277  889 -57 237 327 
    47 71  16   78  118  10  237   56   49 
    48 19.530  1 19 12 43  -60 -1250  882 -56 315 330 
    49 105  24   85  241  26  390  106   61 
    50 19.633  1 19 15 11  -58 -1266  882 -50 329 304 
    51 105  24   85  241  26  390  106   61 
     44Altitude (km) Pressure (mb)    [M] (cm-3)                 < 2 auxiliary dependent variables > 
     45    O2 (cm-3)     O3 (cm-3)  O(3P) (cm-3)  O(1D) (cm-3)   < 4 primary dependent variables > 
     46 
     47            10         265.0      8.61E+06 
     48       1.7E+06       1.0E+06           1.3         10000 
     49            15         121.1      4.04E+06 
     50       8.1E+05       1.1E+06           5.5         10000 
     51            20          55.3      1.85E+06 
     52       3.6E+05       2.9E+06            94           0.9 
     53            25          25.5      8.33E+05 
     54       1.6E+05       3.2E+06           670             5 
     55            30          12.0      3.83E+05 
     56       1.0E+08       1.0E+08        1.E+08         10000 
     57            35           5.7      1.74E+05 
     58       3.5E+04       2.0E+06       2.4E+04           100 
     59            40           2.3      6.67E+04 
     60       1.7E+04       1.0E+06       1.2E+05           330 
     61            45           1.5      4.12E+04 
     62          8900       3.2E+05       3.7E+05           600 
     63            50           0.8      2.14E+04 
     64          4800       1.0E+05       6.5E+05           610 
     65            55          0.43      1.19E+04 
     66          2600       3.2E+04       8.4E+05           440 
     67            60          0.22          6450 
     68          1500          1000       6.5E+05           260 
     69            65          0.11          3420 
     70           820          3200       5.0E+05           150 
     71            70         0.052          1710 
     72           420          1000       4.0E+05            96 
     73            75         0.024           836 
     74           200           320       3.8E+05            67 
     75            80         0.011           403 
     76            90           140       1.4E+06            70 
     77            85       4.5E-03           172 
     78            37           100       3.0E+06           120 
     79            90       1.8E-03          69.8 
     80          12.5           110       3.0E+07           420 
     81            95       7.6E-04          29.3 
     82           4.7            13       3.3E+07           490 
     83           100       3.2E-04          11.9 
     84           1.9           1.7       3.2E+07          1200 
     85 
  • nappy/trunk/general.py

    r345 r347  
    1515 
    1616""" 
    17 #$Log$ 
    18 #Revision 1.3  2004/11/03 16:23:41  selatham 
    19 #updated by selatham for bug fixes and new write methods 
    20 # 
    2117 
    2218# Imports from local package 
  • nappy/trunk/localRules.py

    r343 r347  
    88""" 
    99 
    10 rules={"SNAME":"The BADC", 
    11        "ONAME":"Ronnie BADC"} 
     10localGlobalAttributes={"institution":"Data held at British Atmospheric Data Centre (BADC), Rutherford Appleton Laboratory, UK."} 
     11 
     12 
  • nappy/trunk/na2cdms.py

    r343 r347  
     1#!/usr/bin/env python 
    12""" 
    23na2cdms.py 
     
    67file (NetCDF). 
    78 
     9""" 
     10 
     11helpMessage=""" 
     12 
     13na2nc 
     14===== 
     15 
     16Converts a NASA Ames file to a NetCDF file. 
     17 
     18Usage 
     19===== 
     20 
     21   na2nc.py [<options>] -i <infilename> -o <outfilename>  
     22 
     23Where 
     24----- 
     25 
     26    infilename  - name of input file (NASA Ames). 
     27    outfilename - name of output file (NetCDF). 
     28    options     - list of options: 
     29                    -t <time_units_string>  (such as "hours since 2003-04-30 10:00:00") 
     30     
    831""" 
    932 
     
    1942import cdmsMap 
    2043 
    21 def na2cdms(nafile, ncfile, rules=None): 
     44def na2cdms(nafile, ncfile, time_units=None, rules=None): 
    2245    print "Reading data from: %s" % nafile 
    2346    file=general.openNAFile(nafile) 
    2447 
    25     print "Writing output NetCDF file: %s" % ncfile 
    26     file.toCdmsFile(ncfile) 
     48    print "Writing output NetCDF file: %s\n" % ncfile 
     49    file.toCdmsFile(ncfile, time_units=time_units) 
     50     
     51    print "\nNetCDF file written successfully: %s" % ncfile 
    2752 
    2853    return 1 
     
    3055if __name__=="__main__": 
    3156 
    32    args=sys.argv[1:] 
    33    if not len(args)==2: 
    34        print "Usage:   na2cdms.py <infile> <outfile>\n" 
    35        sys.exit() 
    36    else: 
    37        na2cdms(args[0], args[1])  
     57    args=sys.argv[1:] 
     58    if len(args)<4: 
     59        print helpMessage 
     60        print "Incorrect number of arguments used." 
     61        sys.exit() 
     62         
     63    time_units=None 
     64    for arg in args: 
     65        if arg=="-i": 
     66            infile=args[args.index(arg)+1] 
     67        elif arg=="-o": 
     68            outfile=args[args.index(arg)+1] 
     69        elif arg=="-t": 
     70            time_units=args[args.index(arg)+1] 
     71 
     72    na2cdms(infile, outfile, time_units=time_units)  
     73 
  • nappy/trunk/naFile.py

    r345 r347  
    77 
    88""" 
    9 #$Log$ 
    10 #Revision 1.3  2004/11/03 16:23:41  selatham 
    11 #updated by selatham for bug fixes and new write methods 
    12 # 
    139 
    1410# Imports from python standard library 
     
    184180            self.file.write(("%s "*self.NAUXV+"\n")  % tuple(self.ASCAL)) 
    185181            self.file.write(("%s "*self.NAUXV+"\n")  % tuple(self.AMISS)) 
    186             self.file.write("%s\n"*self.NAUXV % tuple(self.ANAME)) 
     182            self.file.write("%s\n"*self.NV % tuple(self.ANAME)) 
    187183 
    188184    def _readCharAuxVariablesHeaderSection(self): 
  • nappy/trunk/naFile1010.py

    r345 r347  
    66 
    77""" 
    8 #$Log$ 
    9 #Revision 1.2  2004/11/03 16:23:41  selatham 
    10 #updated by selatham for bug fixes and new write methods 
    11 # 
     8 
    129# Imports from python standard library 
    1310 
     
    2118    File Format Index (FFI) 1010. 
    2219    """ 
    23 #$Log$ 
    24 #Revision 1.2  2004/11/03 16:23:41  selatham 
    25 #updated by selatham for bug fixes and new write methods 
    26 # 
    27 # 
    2820 
    2921    def readHeader(self): 
    3022        """ 
    3123        Reads FFI-specifc header section. 
    32         """ 
     24        """         
    3325        self._readCommonHeader() 
    3426        self.DX=readItemsFromLine(self.file.readline(), self.NIV, float) 
     
    3729        self._readAuxVariablesHeaderSection() 
    3830        self._readComments() 
    39  
    40     def writeHeader(self): 
    41         """ 
    42         Writes FFI-specifc header section. 
    43         """ 
    44         self._writeCommonHeader() 
    45         self.file.write(("%s "*self.NIV+"\n") % tuple(self.DX)) 
    46         self.file.write("%s\n"*self.NIV % tuple(self.XNAME)) 
    47         self._writeVariablesHeaderSection() 
    48         self._writeAuxVariablesHeaderSection() 
    49         self._writeComments() 
    5031 
    5132    def _setupArrays(self): 
     
    6142            self.A.append([]) 
    6243 
    63     def _readData1(self, datalines, ivar_count): 
     44    def _readData1(self, datalines, ivar_count):  
    6445        """ 
    6546        Reads first line/section of current block of data. 
    6647        """ 
    6748        # Start with independent and Auxilliary vars 
    68         #print "NAUXV = %s" %self.NAUXV                 testing 
    6949        (x2_and_a, rtlines)=readItemsFromUnknownLines(datalines, 1+self.NAUXV, float) 
    70         #print "First line of block = %s"  %x2_and_a            testing 
    7150        (x, aux)=(x2_and_a[0], x2_and_a[1:]) 
    7251        self.X.append(x) 
     
    8362        # Now get the dependent variables 
    8463        (v, rtlines)=readItemsFromUnknownLines(datalines, self.NV, float)               
    85         # Set up mth list in self.V                              removed by selatham 
    86         #self.V.append([])                                      removed by selatham 
     64        # Set up mth list in self.V             
     65        self.V.append([]) 
    8766        count=0 
    8867        for n in range(self.NV): 
    89             #self.V[n].append([])                                       removed by selatham 
    90             #self.V[ivar_count].append(v[count])                removed by selatham 
    91             self.V[n].append(v[count]) 
    92             count=count+1 
     68            self.V[n].append([]) 
     69            self.V[ivar_count].append(v[count]) 
     70            count=count+1 
    9371        return rtlines 
    94  
    95     def writeData(self): 
    96         """ 
    97         Writes the data section of the file. 
    98         This method can be called directly by the user. 
    99         """ 
    100         for m in range(len(self.X)): 
    101             # Write Independent variable mark and auxiliary variables 
    102             var_string="%s    " % self.X[m] 
    103             for a in range(self.NAUXV): 
    104                 var_string=var_string+("%s    " % self.A[a][m]) 
    105             self.file.write("%s\n" % var_string.rstrip()) 
    106             # Write dependant variables 
    107             var_string="" 
    108             for n in range(self.NV): 
    109                  var_string=var_string+("%s    " %self.V[n][m]) 
    110             self.file.write("%s    \n" %var_string) 
  • nappy/trunk/naFile1020.py

    r345 r347  
    3838        """ 
    3939        Reads second line/section (if used) of current block of data. 
    40         """ 
     40        """         
    4141        # Now get the dependent variables 
    42         (v, rtlines)=readItemsFromUnknownLines(datalines, self.NV*self.NVPM, float) 
     42        (v, rtlines)=readItemsFromUnknownLines(datalines, self.NV*self.NVPM, float)               
    4343        count=0 
    44         #print "chunk of ind vars",v            testing 
    45         #print rtlines                          testing 
    4644        for n in range(self.NV): 
    4745            self.V[n].append([]) 
    4846            for i in range(self.NVPM):   # Number of steps where independent variable is implied 
    4947                self.V[n][ivar_count].append(v[count]) 
    50                 count=count+1 
     48            count=count+1 
    5149        return rtlines 
    5250 
     
    6260        self.X[0]=newX 
    6361        self._normalizedX="yes" 
    64  
    65     def writeData(self): 
    66         """ 
    67         Writes the data section of the file. 
    68         This method can be called directly by the user. 
    69         """ 
    70         for m in range(len(self.X)): 
    71             # Write Independent variable mark and auxiliary variables 
    72             var_string="%s    " % self.X[m] 
    73             for a in range(self.NAUXV): 
    74                 var_string=var_string+("%s    " % self.A[a][m]) 
    75             self.file.write("%s\n" % var_string.rstrip()) 
    76             # Write dependant variablesf. 
    77             var_string="" 
    78             for n in range(self.NV): 
    79                  var_string=var_string+("%s    " %self.V[n][m]) 
    80             self.file.write("%s    \n" %var_string) 
  • nappy/trunk/naFile2010.py

    r345 r347  
    66 
    77""" 
    8 #$Log$ 
    9 #Revision 1.2  2004/11/03 16:23:41  selatham 
    10 #updated by selatham for bug fixes and new write methods 
    11 # 
    128 
    139# Imports from python standard library 
  • nappy/trunk/naToCdms.py

    r343 r347  
    1818import cdmsMap 
    1919from naError import * 
     20import version 
    2021 
    2122# Import external packages (if available) 
     
    2425else: 
    2526    try: 
    26         import cdms, Numeric  
     27        import cdms, Numeric 
     28        cdms.setAutoBounds("off")  
    2729    except: 
    2830        print "Cannot import cdms package, CDAT-dependent features will not work." 
    2931 
    3032# Define global variables 
    31 safe_nc_id=re.compile("[\s\[\(\)\]\=\+\-\?\#\~\@\&\$\%\£\!\*\{\}]+") 
     33safe_nc_id=re.compile("[\s\[()\]=+-?#~@&$%!*{}\^]+") 
     34time_units_pattn=re.compile("\w+\s+since\s+\d{4}-\d{1,2}-\d{1,2}\s+\d+:\d+:\d+") 
    3235 
    3336class NAToCdms: 
    3437 
    35     def toCdmsFile(self, filename, variables="all", aux_variable="all", global_attributes={"Conventions":"CF-1.0"}, ffi=None): 
    36         if sys.platform.find("win")>-1: 
    37             raise NAPlatformError 
    38  
     38    def toCdmsFile(self, filename, time_units=None, variables="all", aux_variable="all", global_attributes={"Conventions":"CF-1.0"}, ffi=None): 
     39        if sys.platform.find("win")>-1: 
     40            raise NAPlatformError 
     41 
     42        self.time_units=time_units 
     43        # Read the data section of the NASA Ames file 
     44        self.readData() 
    3945        self.cdmsFilename=filename 
    4046        self.cdmsFile=cdms.open(self.cdmsFilename, 'w') 
     
    4450            setattr(self.cdmsFile, key, global_attributes[key]) 
    4551 
    46         for key in cdmsMap.cdmsMap["fromNA"].keys(): 
     52        for key in cdmsMap.fromNA.keys(): 
    4753            if type(key)==tuple: 
    4854                if key==("SCOM", "NCOM"): 
    49                     commentline="NASA Ames Special Comments:\n" 
    50                     for i in self.SCOM: commentline=commentline+"\n"+i 
    51                     commentline=commentline+"NASA Ames Normal Comments:\n" 
    52                     for i in self.NCOM: commentline=commentline+"\n"+i 
     55                    # Map special and normal comments into the global comments section 
     56                     
     57                    commentline="" 
     58                    if self.NSCOML>0: 
     59                        commentline=commentline+"###NASA Ames Special Comments follow###\n" 
     60                        for i in self.SCOM:  
     61                            if i.strip() not in ("###NASA Ames Special Comments follow###", "###NASA Ames Special Comments end###", 
     62                                    "Additional Variable Attributes defined in the source file and not translated elsewhere:", 
     63                                    "Additional Global Attributes defined in the source file and not translated elsewhere:", "\n"): 
     64                                commentline=commentline+"\n"+i 
     65                        commentline=commentline+"\n###NASA Ames Special Comments end###\n" 
     66                    if self.NNCOML>0: 
     67                        commentline=commentline+"###NASA Ames Normal Comments follow###\n" 
     68                        for i in self.NCOM:  
     69                            if i.strip() not in ("###NASA Ames Normal Comments follow###", "###NASA Ames Normal Comments end###", "###Data Section begins on the next line###", 
     70                                    "Additional Variable Attributes defined in the source file and not translated elsewhere:", 
     71                                    "Additional Global Attributes defined in the source file and not translated elsewhere:", "\n"): 
     72                                commentline=commentline+"\n"+i 
     73                        commentline=commentline+"\n###NASA Ames Normal Comments end###" 
     74                        commentline=commentline.replace("\n\n", "\n") 
    5375                    self.cdmsFile.comment=commentline 
     76                elif key==("ONAME", "ORG"): 
     77                    # Map the two organisation NA files to the institution field in CDMS (NetCDF) 
     78                    self.cdmsFile.institution="%s (ONAME from NASA Ames file); %s (ORG from NASA Ames file)." % (self.ONAME, self.ORG) 
    5479                else: 
    5580                    item=(getattr(self, key[0]))+"\n"+(getattr(self, key[1])) 
    56                     setattr(self.cdmsFile, cdmsMap.cdmsMap["fromNA"][key], item) 
     81                    setattr(self.cdmsFile, cdmsMap.fromNA[key], item) 
    5782            elif key=="RDATE": 
    5883                dateparts=getattr(self, "RDATE") 
     
    6085                item=datestring+" - NASA Ames File created/revised.\n" 
    6186                timestring=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) 
    62                 item=item+"\n"+timestring+" - Data written to NetCDF file." 
     87                item=item+"\n"+timestring+" - Converted to CDMS (NetCDF) format using nappy-%s." % version.version 
    6388            else: 
    64                 setattr(self.cdmsFile, cdmsMap.cdmsMap["fromNA"][key], getattr(self, key)) 
     89                setattr(self.cdmsFile, cdmsMap.fromNA[key], getattr(self, key)) 
    6590 
    6691        # Then do dimensions 
     
    91116            raise NAPlatformError 
    92117        (varname, units, miss, scal)=self.getVariable(var_number) 
    93  
     118        print self.V 
    94119        array=Numeric.array(self.V[var_number]) 
    95120        array=array*scal 
     
    103128        # Sort units etc 
    104129        if units:   var.units=units 
     130         
     131        # Add the best variable name 
    105132        if len(varname)<20: 
    106133            var.id=safe_nc_id.sub("_", varname).lower() 
     
    109136 
    110137        var.long_name=var.name=varname 
     138 
     139        # If we have a standard name list then compare to it 
    111140        if varname in ("standard_name_list",) or varname in ("badc_list",): 
    112             var.standard_name="name from the list*****" 
     141            var.standard_name="name from the list###**" 
     142 
     143        # Add a NASA Ames variable number (for mapping correctly back to NASA Ames) 
     144        var.nasa_ames_var_number=var_number 
    113145 
    114146        return var 
     
    142174        var.long_name=var.name=varname 
    143175        if varname in ("standard_name_list",) or varname in ("badc_list",): 
    144             var.standard_name="name from the list*****" 
     176            var.standard_name="name from the list***" 
     177 
     178 
     179        # Add a NASA Ames auxiliary variable number (for mapping correctly back to NASA Ames) 
     180        var.nasa_ames_aux_var_number=avar_number 
    145181 
    146182        return var         
     
    182218                axis.standard_name=axis.id=axis_type 
    183219                apply(designators[axis_type.lower()]) 
     220                # Check warning for time units pattern 
     221                if axis.isTime() and (not hasattr(axis, "units") or not time_units_pattn.match(axis.units)): 
     222                    if self.time_units==None: 
     223                        print """\nWARNING: Could not recognise time units. For true NetCDF compability 
     224please insert the correct time unit string below in the format: 
     225     
     226    <units> since <YYYY>-<MM>-<DD> <hh>-<mm>-<ss> 
     227     
     228Where: 
     229    <units> is a known time interval such as years, months, days, etc. 
     230    <YYYY> is the year, <MM> is the month, <DD> is the day, 
     231    <hh> is the hour, <mm> is minutes, <ss> is seconds. 
     232""" 
     233                        timeUnitsInput="I WON'T MATCH" 
     234                        while timeUnitsInput!="" and not time_units_pattn.match(timeUnitsInput): 
     235                            timeUnitsInput=raw_input("Please insert your time unit string here (or leave blank):").strip() 
     236                        if timeUnitsInput!="": 
     237                            self.time_units=timeUnitsInput 
     238                    axis.units=self.time_units 
     239                    axis.long_name=axis.name="time (%s)" % self.time_units 
     240                 
    184241        return axis 
    185242 
     243 
     244class NA2Cdms(NAToCdms): 
     245    """ 
     246    Pseudonym for NAToCdms class. 
     247    """ 
     248    pass 
  • nappy/trunk/output/out2010.na

    r345 r347  
    999  
    10101  
    11    0.000     
     110.0  
    1212Latitude (degrees North) 
    1313Altitude (km) 
     
    4343 
    44440.0    1013.3 
    45   -3.000      -2.600      -2.300       2.000       4.800       4.600       4.500       3.000      -0.900 
     45-3.0    -2.6    -2.3    2.0    4.8    4.6    4.5    3.0    -0.9 
    464620.0    55.3 
    47  -15.100      -4.200       6.900      12.800      14.700      20.000      21.500      18.000       8.200 
     47-15.1    -4.2    6.9    12.8    14.7    20.0    21.5    18.0    8.2 
    484840.0    2.3 
    49  -29.000     -15.200       3.400      28.200      41.000      39.100      17.900       8.000       0.100 
     49-29.0    -15.2    3.4    28.2    41.0    39.1    17.9    8.0    0.1 
    505060.0    0.22 
    51  -10.000       8.400      31.200      59.900      78.500      77.700      47.000      17.600      16.000 
     51-10.0    8.4    31.2    59.9    78.5    77.7    47.0    17.6    16.0 
    525280.0    0.01 
    53  200.000     200.000     200.000     200.000     200.000     200.000     200.000     200.000     200.000 
     53200.0    200.0    200.0    200.0    200.0    200.0    200.0    200.0    200.0 
  • nappy/trunk/output/out3010.na

    r345 r347  
    997 4  
    10101 1  
    11  -90.000     
    12   50.000     
     11-90.0  
     1250.0  
    1313Latitude (degrees) 
    1414Altitude (km) 
     
    4141 
    4242172.0 
    43  193.000     211.000     224.000     229.000     235.000     245.000     270.000 
    44  221.000     230.000     254.000     272.000     281.000     289.000     300.000 
    45  220.000     229.000     244.000     253.000     260.000     263.000     278.000 
    46  195.000     208.000     217.000     219.000     223.000     230.000     240.000 
     43193.0    211.0    224.0    229.0    235.0    245.0    270.0 
     44221.0    230.0    254.0    272.0    281.0    289.0    300.0 
     45220.0    229.0    244.0    253.0    260.0    263.0    278.0 
     46195.0    208.0    217.0    219.0    223.0    230.0    240.0 
    4747355.0 
    48  270.000     245.000     235.000     229.000     224.000     211.000     193.000 
    49  300.000     289.000     281.000     272.000     254.000     230.000     221.000 
    50  278.000     263.000     260.000     253.000     244.000     229.000     220.000 
    51  240.000     230.000     223.000     219.000     217.000     208.000     195.000 
     48270.0    245.0    235.0    229.0    224.0    211.0    193.0 
     49300.0    289.0    281.0    272.0    254.0    230.0    221.0 
     50278.0    263.0    260.0    253.0    244.0    229.0    220.0 
     51240.0    230.0    223.0    219.0    217.0    208.0    195.0 
  • nappy/trunk/output/out4010.na

    r345 r347  
    9913 7 2  
    10101 1 1  
    11  -30.000     
    12   90.000     
    13   20.000     
     11-30.0  
     1290.0  
     1320.0  
    1414Longitude (degrees) 
    1515Latitude (degrees) 
     
    5353 
    54546.0 
    55  230.000     230.000     230.000     230.000     230.000     230.000     230.000     230.000     230.000     230.000     230.000     230.000     230.000 
    56  216.000     216.500     217.000     218.000     218.500     219.000     220.000     220.400     220.400     220.900     221.300     221.000     220.700 
    57  210.600     211.000     211.400     211.800     212.200     212.600     213.000     213.000     213.100     213.000     213.500     213.000     213.100 
    58  205.400     206.000     206.600     207.200     207.800     208.400     209.000     209.200     209.800     210.300     210.000     209.800     209.700 
    59  204.000     204.600     205.000     205.700     206.200     206.800     207.000     207.400     207.800     208.200     208.600     208.300     208.000 
    60  194.700     195.200     196.000     196.600     197.200     197.500     198.000     198.400     198.700     198.900     199.300     199.500     199.100 
    61  185.000     185.000     185.000     185.000     185.000     185.000     185.000     185.000     185.000     185.000     185.000     185.000     185.000 
    62  260.000     260.000     260.000     260.000     260.000     260.000     260.000     260.000     260.000     260.000     260.000     260.000     260.000 
    63  230.000     230.500     231.000     233.000     233.700     234.200     235.000     235.500     236.000     236.500     237.000     237.500     238.000 
    64  217.600     218.300     219.000     219.300     219.700     220.000     225.000     225.800     226.400     227.000     227.800     228.500     229.100 
    65  216.200     216.700     217.000     217.400     218.100     218.500     219.000     219.800     221.000     221.600     222.000     223.000     224.000 
    66  212.100     212.700     213.000     213.500     213.700     214.000     214.000     214.500     215.100     216.000     217.000     218.000     219.000 
    67  198.400     199.000     199.400     200.000     200.600     201.100     201.000     201.500     202.000     202.800     203.400     204.000     205.000 
    68  183.000     183.000     183.000     183.000     183.000     183.000     183.000     183.000     183.000     183.000     183.000     183.000     183.000 
     55230.0    230.0    230.0    230.0    230.0    230.0    230.0    230.0    230.0    230.0    230.0    230.0    230.0 
     56216.0    216.5    217.0    218.0    218.5    219.0    220.0    220.4    220.4    220.9    221.3    221.0    220.7 
     57210.6    211.0    211.4    211.8    212.2    212.6    213.0    213.0    213.1    213.0    213.5    213.0    213.1 
     58205.4    206.0    206.6    207.2    207.8    208.4    209.0    209.2    209.8    210.3    210.0    209.8    209.7 
     59204.0    204.6    205.0    205.7    206.2    206.8    207.0    207.4    207.8    208.2    208.6    208.3    208.0 
     60194.7    195.2    196.0    196.6    197.2    197.5    198.0    198.4    198.7    198.9    199.3    199.5    199.1 
     61185.0    185.0    185.0    185.0    185.0    185.0    185.0    185.0    185.0    185.0    185.0    185.0    185.0 
     62260.0    260.0    260.0    260.0    260.0    260.0    260.0    260.0    260.0    260.0    260.0    260.0    260.0 
     63230.0    230.5    231.0    233.0    233.7    234.2    235.0    235.5    236.0    236.5    237.0    237.5    238.0 
     64217.6    218.3    219.0    219.3    219.7    220.0    225.0    225.8    226.4    227.0    227.8    228.5    229.1 
     65216.2    216.7    217.0    217.4    218.1    218.5    219.0    219.8    221.0    221.6    222.0    223.0    224.0 
     66212.1    212.7    213.0    213.5    213.7    214.0    214.0    214.5    215.1    216.0    217.0    218.0    219.0 
     67198.4    199.0    199.4    200.0    200.6    201.1    201.0    201.5    202.0    202.8    203.4    204.0    205.0 
     68183.0    183.0    183.0    183.0    183.0    183.0    183.0    183.0    183.0    183.0    183.0    183.0    183.0 
    696912.0 
    70  240.000     240.000     240.000     240.000     240.000     240.000     240.000     240.000     240.000     240.000     240.000     240.000     240.000 
    71  228.600     228.700     228.800     229.000     229.300     229.800     230.000     230.500     231.000     231.500     232.000     231.500     231.000 
    72  221.300     221.700     222.000     222.400     222.600     223.000     223.000     223.600     224.000     224.400     225.000     224.500     224.000 
    73  216.800     217.000     217.300     217.800     218.000     218.400     219.000     219.300     219.600     220.300     220.800     219.900     219.000 
    74  215.100     215.400     215.700     216.000     216.300     216.600     217.000     217.500     218.000     218.600     219.000     218.900     218.400 
    75  207.400     207.500     207.600     207.700     207.800     207.900     208.000     208.200     208.400     208.600     208.300     208.000     208.300 
    76  195.000     195.000     195.000     195.000     195.000     195.000     195.000     195.000     195.000     195.000     195.000     195.000     195.000 
    77  270.000     270.000     270.000     270.000     270.000     270.000     270.000     270.000     270.000     270.000     270.000     270.000     270.000 
    78  243.000     243.500     244.000     244.300     244.700     245.000     245.000     245.200     245.500     250.000     250.800     251.000     251.000 
    79  232.100     232.700     233.000     234.000     234.300     234.700     235.000     235.300     235.700     236.200     236.800     236.600     236.100 
    80  226.400     226.800     227.000     227.400     228.000     228.800     229.000     229.800     229.700     230.300     230.400     230.300     230.000 
    81  222.700     222.800     222.900     223.200     223.500     224.000     224.000     224.500     225.000     225.200     225.300     225.000     224.900 
    82  209.800     210.000     210.200     210.400     210.600     210.800     211.000     211.000     211.200     211.300     212.000     212.100     211.800 
    83  193.000     193.000     193.000     193.000     193.000     193.000     193.000     193.000     193.000     193.000     193.000     193.000     193.000 
     70240.0    240.0    240.0    240.0    240.0    240.0    240.0    240.0    240.0    240.0    240.0    240.0    240.0 
     71228.6    228.7    228.8    229.0    229.3    229.8    230.0    230.5    231.0    231.5    232.0    231.5    231.0 
     72221.3    221.7    222.0    222.4    222.6    223.0    223.0    223.6    224.0    224.4    225.0    224.5    224.0 
     73216.8    217.0    217.3    217.8    218.0    218.4    219.0    219.3    219.6    220.3    220.8    219.9    219.0 
     74215.1    215.4    215.7    216.0    216.3    216.6    217.0    217.5    218.0    218.6    219.0    218.9    218.4 
     75207.4    207.5    207.6    207.7    207.8    207.9    208.0    208.2    208.4    208.6    208.3    208.0    208.3 
     76195.0    195.0    195.0    195.0    195.0    195.0    195.0    195.0    195.0    195.0    195.0    195.0    195.0 
     77270.0    270.0    270.0    270.0    270.0    270.0    270.0    270.0    270.0    270.0    270.0    270.0    270.0 
     78243.0    243.5    244.0    244.3    244.7    245.0    245.0    245.2    245.5    250.0    250.8    251.0    251.0 
     79232.1    232.7    233.0    234.0    234.3    234.7    235.0    235.3    235.7    236.2    236.8    236.6    236.1 
     80226.4    226.8    227.0    227.4    228.0    228.8    229.0    229.8    229.7    230.3    230.4    230.3    230.0 
     81222.7    222.8    222.9    223.2    223.5    224.0    224.0    224.5    225.0    225.2    225.3    225.0    224.9 
     82209.8    210.0    210.2    210.4    210.6    210.8    211.0    211.0    211.2    211.3    212.0    212.1    211.8 
     83193.0    193.0    193.0    193.0    193.0    193.0    193.0    193.0    193.0    193.0    193.0    193.0    193.0 
  • nappy/trunk/test/testReadAllFFIs.py

    r345 r347  
    2020    print "\n\nTesting FFI: ", ffi 
    2121    file=os.path.join("..", "data_files", "%s.na" % ffi) 
    22     # if file named after ffi doesn't exist, use an 'a' version. 
    2322    if not os.path.exists(file): file=os.path.join("..", "data_files", "%sa.na" % ffi) 
    2423    f=nappy.openNAFile(file) 
    2524    f.readData() 
    26  
    27     print "NVPM:", f.NVPM 
    2825    print "DX:",f.DX 
    2926    print "VNAME", f.VNAME 
  • nappy/trunk/test/testWrites.py

    r345 r347  
    88 
    99""" 
    10 #$Log$ 
    11 #Revision 1.3  2004/11/03 16:25:28  selatham 
    12 #updated by selatham for bug fixes and new write methods 
    13 # 
    14 # 
    1510 
    1611import os 
     
    1813import nappy ; reload(nappy) 
    1914 
    20 for ffi in [1001, 1010, 2010, 3010, 4010]: 
     15for ffi in [1001, 2010, 3010, 4010]: 
    2116    infile=os.path.join("..", "data_files", "%s.na" % ffi) 
    2217    print "Reading in ", infile 
  • nappy/trunk/version.py

    r343 r347  
    77""" 
    88 
    9 version="0.9.7.2" 
     9version="0.0.1" 
    1010 
Note: See TracChangeset for help on using the changeset viewer.