Entry 3286

For a given particle size, converts cloud optical thickness from one wavelength to another.

   

Submitted by Geoff C. on March 8, 2010 at 10:30 p.m.
Language: Python. Code size: 2.8 KB.

#!/usr/bin/env python

### System libraries
import time, string, sys
from os import path

import numpy as np
from bisect import bisect,bisect_right,bisect_left

def binary_search_SP(cpsval,size,cpsArr):
    status = 0
    if ((cpsval > cpsArr[0]) and (cpsval < cpsArr[-1])):
        #-- This is for unit offset
        #l_index = 0
        #u_index = size+1
        #-- This is for zero offset
        l_index = -1
        u_index = size
        while ((u_index - l_index) > 1):
            search_index = (u_index + l_index)/2
            if (cpsval <= cpsArr[search_index]):
                u_index = search_index
            else :
                l_index = search_index

    elif (cpsval <= cpsArr[0]):
        print "cpsval <= minimum in LUT"
        l_index = 0
        u_index = 1
        status = 1
    elif (cpsval >= cpsArr[-1]):
        print "cpsval >= maximum in LUT"
        l_index = size-2
        u_index = size-1
        status = 1
    else :
        print "Some situation not captured, passing!!!"
        pass

    return  [u_index, l_index, status]

def COTconvert(nCOT,COTlut,CPS,COTvis):

    cpsArr = COTlut[:,0]
    visIrEfficRatio = COTlut[:,1]

    # If CPS exceeds largest value in LUT, assign to COTir
    # the last COT value in LUT

    if ( CPS > cpsArr[-1]) :
        s = visIrEfficRatio[-1]
    else :
        u_index,l_index,status = binary_search_SP(CPS, nCOT, cpsArr)

        print "Finished binary search..."
        print "l_index = ",l_index
        print "u_index = ",u_index

        m = (visIrEfficRatio[u_index]-visIrEfficRatio[l_index])/(cpsArr[u_index]-cpsArr[l_index])
        b = visIrEfficRatio[u_index]-m*cpsArr[u_index]
        s = m*CPS+b

        print "cpsArr[l_index] = ",cpsArr[l_index]
        print "cpsArr[u_index] = ",cpsArr[u_index]
        print "visIrEfficRatio[l_index] = ",visIrEfficRatio[l_index]
        print "visIrEfficRatio[u_index] = ",visIrEfficRatio[u_index]
        print "s = ",s

    # Compute the IR COT
    COTir = COTvis/s
    return COTir

def readCOTfile(file):
    results = []
    file=str(file)
    f = open(file,'r')

    lines = f.readlines()[1:]
    f.close()
    for l in lines:
        fields = l.split()
        CPS = float(fields[0])
        COT = float(fields[1])
        all = [CPS,COT]
        results.append(all)

    results = np.array(results)
    nCOT = np.shape(results)[0]
    return results,nCOT

def main(cot,cps):
    file = '/data/geoffc/MODIS_NPOESS/trunk/LEOCAT/data/VIIRS/LUT/CTP/COTlut.db'
    COTlut,nCOT, = readCOTfile(file)
    COTir = COTconvert(nCOT,COTlut,cps,cot)
    print "COTir = ",COTir

if __name__=='__main__':
    cot   = float(sys.argv[1])
    cps   = float(sys.argv[2])
    print "Input cloud optical thickness: ",cot
    print "Input cloud particle size: ",cps,"microns"

    main(cot,cps)

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).