Esempio n. 1
0
        if m > max_abs_pressure:
            max_abs_pressure = m
        m_ind = [i for i, j in enumerate(data['pressure']) if j ==m] # this line finds the index of the max depth
        
        
        #this loop here will take the readings only when the fish is going down
        for j in names:
            vars()[j] = []
            for i in np.arange(1,float(m_ind[0])):
                if data['pressure'][i]-data['pressure'][i-1] >0:
                    vars()[j].append(data[str(j)][i])
                    
        depth = sw.depth(pressure, xyzt['lat_DD.dd'])        
        c3515 = 42.9140
        condr = [x/c3515 for x in cond]
        salinity = sw.salt(condr, temp, pressure)
        density = sw.dens(salinity, temp,pressure)  
        griddeddata=[]
    
        for k in names2:
            griddeddata = np.interp(grid_depth,depth,vars()[k],right=np.NaN)
            griddeddata = griddeddata[0:]
            vars()['grid_'+k][:,file[0]] = vars()['griddeddata']

        f.close()
    except:
        failedloadfiles.append(str(file))
        print ("Could not process " + file[1])
        for k in names2:
            vars()['grid_'+k][:,file[0]] = np.NaN
def parseScience(gliderTbdDir, fileType):
    """
    Module:     parseScience()
    Date:       2012-11-27
    Author:     [email protected]
    Modified:   2013-10-15
        By:     [email protected]
    Inputs:     None
    Outputs:    Inserts into SQLite database file
    Purpose:    Grabs a db cursor and calls dbd2asc for all non-parsed tbd
                files. Looks for 'sci_' and splits sensor list. Finds pos
                of sensors of interest so list can change if tbdlist.dat
                changes. Uses pos of SOI to store values in correct field.
    """

    cur = gliderlog.cursor()
    curParsed = gliderlog.cursor()
    sbdParsedStructure = 0
    #
    #Regex for lines beginning with m_present_time
    #m_present_time structure: '1277271054.36734
    pattMPresentTime = re.compile(r'1[0-9]{9}\.[0-9]{5}')
    #
    select = "select %sfile from %sFiles where parsed = 0 \
ORDER BY %sfile ASC" % (fileType, fileType, fileType)
    cur.execute(select)
    for(tbdFile) in cur:
        if DEBUG > 0:
            print "Running dbd2asc on %s/%s" % (gliderTbdDir, tbdFile[0])
        command = "/opt/dinkum/dbd2asc -c /opt/glider_data_pipeline/cache \
%s/%s" % (gliderTbdDir, tbdFile[0])
        p = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
        (sIn, sOut) = (p.stdin, p.stdout)
        myBuffer = sOut.xreadlines()
        #
        curInsert = gliderlog.cursor()
        curInsert.execute('begin')
        for (line) in myBuffer:
            #2011-06-02 rdc changed to sci_ to reflect new tbd file format
            #Look to see if line starts with "sci_"  -- assume that a list
            #of sensors follows. Split into sensors, create tbdSensors
            #table and store values in tbdSensorReadings.
            if (line.startswith("sci_")):
                #we need to split and create here, not print
                sensorList = line.split()
                if (DEBUG > 1):
                    print "sensorList: %s" % (sensorList)
                if DEBUG > 1:
                    for (sensor) in sensorList:
                        print "Factored %s" % (sensor)
                #Get order of sensors
                m_present_timePos = sensorList.index('sci_m_present_time')
                sci_water_tempPos = sensorList.index('sci_water_temp')
                sci_water_condPos = sensorList.index('sci_water_cond')
                sci_water_pressurePos = sensorList.index('sci_water_pressure')
                sci_bbfl2s_chlor_scaledPos = sensorList.index('sci_bbfl2s_chlor_scaled')

            if pattMPresentTime.search(line):
                index = 0
                matchobj = pattMPresentTime.search(line)
                if matchobj:
                    if DEBUG > 1:
                        print "MATCH ON pattMPresentTime"
                        print "m_present_time: %s" % matchobj.group(0)
                    m_present_time = float(matchobj.group(0))
                    line  = line.replace('NaN','nan')
                    sensorReadings = line.split()
                    if DEBUG > 1:
                        print sensorReadings
                sci_water_cond = float(sensorReadings[sci_water_condPos])
                sci_water_temp = float(sensorReadings[sci_water_tempPos])
                sci_water_pressure = float(sensorReadings[sci_water_pressurePos])
                sci_water_condRatio = (sci_water_cond*0.23302418791070513)
                #Salinity and density calculations and db update
            #
                if (sci_water_condRatio > 0 and sci_water_temp > 0 and \
sci_water_pressure > 0):
                    calc_salinity = sw.salt(sci_water_condRatio, \
sci_water_temp, sci_water_pressure)

                    #get most recent position
                    #[TO DO] Fudge it for now -- add to plotValues
                    lon = -82
                    lat = 27
                    absSalinty = gsw.SA_Sstar_from_SP(calc_salinity, \
sci_water_pressure, lon, lat)[0]
                    calc_density = (gsw.rho(absSalinty, sci_water_temp, \
sci_water_pressure) - 1000)
                else:
                    sci_water_condRatio = 'nan'
                    calc_salinity = 'nan'
                    calc_density = 'nan'
                    absSalinty = 'nan'

                curInsert.execute("INSERT INTO plotValues(m_present_time,\
m_depth, m_water_depth, sci_water_temp, sci_water_cond, sci_water_pressure,\
calc_salinity, absSalinty, calc_density,sci_bbfl2s_chlor_scaled, sci_moteopd_corr1,\
sci_moteopd_corr2,sci_moteopd_corr3,sci_moteopd_corr4,sci_moteopd_corr5,\
sci_moteopd_corr6,sci_moteopd_corr7,sci_moteopd_corr8,sci_moteopd_corr9,\
sci_moteopd_corr10,sci_moteopd_corr11,m_avg_climb_rate,m_avg_dive_rate,m_lat, \
m_lon, m_tot_horz_dist, m_avg_speed,sci_moteopd_volt) \
VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", \
(sensorReadings[m_present_timePos],'nan','nan',\
sensorReadings[sci_water_tempPos],sci_water_condRatio,\
sensorReadings[sci_water_pressurePos],calc_salinity, \
absSalinty, calc_density,sensorReadings[sci_bbfl2s_chlor_scaledPos],0,0,0,0,0,0,0,0,0,0,0 \
,'nan','nan','nan','nan','nan','nan',0))
        curInsert.execute('commit')
        curInsert.close()
        select = "UPDATE %sFiles set parsed = '1' where %sfile = '%s'" \
% (fileType, fileType, tbdFile[0])
        curParsed.execute(select)
        curParsed.close()
    cur.close()